<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://docs.pwpush.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://docs.pwpush.com/" rel="alternate" type="text/html" /><updated>2026-08-30T19:27:55-04:00</updated><id>https://docs.pwpush.com/feed.xml</id><title type="html">Password Pusher</title><subtitle>Documentation portal for Password Pusher - securely share sensitive information.</subtitle><author><name>Peter Giacomo Lombardo</name></author><entry><title type="html">How to Share Credentials with Contractors and Vendors (Without Email or Slack)</title><link href="https://docs.pwpush.com/posts/2026-08-28-How-to-Share-Credentials-with-Contractors-and-Vendors/" rel="alternate" type="text/html" title="How to Share Credentials with Contractors and Vendors (Without Email or Slack)" /><published>2026-08-28T00:00:00-04:00</published><updated>2026-08-28T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/How-to-Share-Credentials-with-Contractors-and-Vendors</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-08-28-How-to-Share-Credentials-with-Contractors-and-Vendors/"><![CDATA[<p><strong>TL;DR:</strong> Contractors and vendors sit outside your organization. You can’t add them to your password vault, and you shouldn’t email them credentials. Ephemeral, self-destructing links solve the outbound problem — the credential disappears after retrieval, nothing persists in anyone’s inbox. For the other direction (collecting credentials <em>from</em> contractors), a secure request link lets them submit credentials to you without email or chat. No accounts needed on either side.</p>

<!-- more -->

<h2 id="the-problem-with-external-parties">The Problem with External Parties</h2>

<p>Internal credential sharing has good solutions. Your team probably uses a password manager — 1Password, Bitwarden, Keeper — and sharing within the org is straightforward.</p>

<p>Contractors and vendors are a different problem. They’re not in your directory. They don’t have access to your vault. They’re working with you for six weeks or six months, and during that time they need database credentials, API keys, staging environment logins, service account passwords.</p>

<p>The typical path is the fastest one available: a Slack DM, an email, a Teams message, a text. It takes ten seconds and works immediately.</p>

<p>It also means that credential is now sitting in a message history that will outlive the engagement by years. When the contractor is gone, the credential isn’t.</p>

<h2 id="what-typically-goes-wrong">What Typically Goes Wrong</h2>

<table>
  <thead>
    <tr>
      <th>Method</th>
      <th>Why it fails</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Email</td>
      <td>Searchable forever. Forwarded unknowingly. Compromised in a breach and every credential ever sent through it is exposed.</td>
    </tr>
    <tr>
      <td>Slack / Teams DM</td>
      <td>Persists in message history. Discoverable by workspace admins and anyone who compromises an account.</td>
    </tr>
    <tr>
      <td>Shared Google Doc</td>
      <td>Accessible to anyone with the link. No access logging. Forgotten about and left open indefinitely.</td>
    </tr>
    <tr>
      <td>Text message</td>
      <td>Unencrypted in transit on most carriers. Stored on the device. Backed up to iCloud or Google.</td>
    </tr>
  </tbody>
</table>

<p>The issue isn’t that people are careless. It’s that none of these tools were designed for credential sharing, and they all default to persistence.</p>

<h2 id="how-ephemeral-sharing-works">How Ephemeral Sharing Works</h2>

<p>The concept is straightforward. Instead of sending the credential itself, you send a link. The recipient opens the link, retrieves the credential, and the link self-destructs.</p>

<p>With <a href="https://pwpush.com">Password Pusher</a>, the workflow looks like this:</p>

<ol>
  <li>Paste the credential and set an expiration — after one view, after 24 hours, or whatever makes sense</li>
  <li>Optionally add a passphrase (communicated separately — a phone call works)</li>
  <li>Send the generated link to the contractor through whatever channel you normally use</li>
  <li>The contractor opens the link, copies the credential, and the link is permanently destroyed</li>
  <li>You get a full audit trail — who accessed it, when, how many times</li>
</ol>

<p>The contractor doesn’t need an account. No signup, no login, no app to install. They click a link, get the credential, and the link is gone.</p>

<p>If a link scanner (Microsoft 365 and Google Workspace both do this) opens the link before the contractor does, the <a href="https://docs.pwpush.com/docs/retrieval-step/">retrieval step</a> catches it — the link requires a deliberate click to reveal the payload, so automated scanners don’t consume the view.</p>

<h2 id="the-other-direction-collecting-credentials-from-contractors">The Other Direction: Collecting Credentials from Contractors</h2>

<p>This is the part most guides skip. Sharing credentials <em>with</em> contractors is half the problem. The other half is collecting credentials <em>from</em> them.</p>

<p>A contractor sets up a staging server and needs to hand you the admin credentials. A vendor provisions an API key and needs to get it to your team. An MSP rotates a client’s service account password and needs to deliver it securely.</p>

<p>Password Pusher’s <a href="https://docs.pwpush.com/docs/requests/">Requests</a> feature handles this. You create a request link and send it to the contractor. They open it, paste the credential, and submit. You receive it as a self-destructing push with the same audit trail and automatic expiration.</p>

<p>The contractor still doesn’t need an account. They just fill in a form and submit.</p>

<h2 id="what-about-password-managers">What About Password Managers?</h2>

<p>Password managers are the right tool for ongoing, internal credential management. If a contractor needs persistent access to shared credentials over the life of an engagement, adding them as a guest in your vault (1Password, Bitwarden, Keeper) may be the better answer.</p>

<p>Where ephemeral sharing makes more sense:</p>

<ul>
  <li><strong>One-time handoffs</strong> — a credential the contractor needs once during onboarding, not ongoing</li>
  <li><strong>Contractors who won’t create an account</strong> — some won’t, especially for a short engagement</li>
  <li><strong>Compliance-sensitive environments</strong> — you need a record that the credential was accessed exactly once and then destroyed</li>
  <li><strong>The other direction</strong> — most password managers don’t have a mechanism for external parties to <em>submit</em> credentials to you</li>
</ul>

<p>These approaches aren’t mutually exclusive. Plenty of organizations use a password manager for their team and ephemeral links for external handoffs.</p>

<h2 id="where-this-might-not-be-the-right-fit">Where This Might Not Be the Right Fit</h2>

<p>Ephemeral sharing solves the ad-hoc credential handoff. It doesn’t solve:</p>

<ul>
  <li><strong>Ongoing access management</strong> — if a contractor needs persistent access to a system, provision them a proper account with scoped permissions and an expiration date</li>
  <li><strong>Application-level access</strong> — if you can grant access via SSO or OAuth instead of sharing a password, do that</li>
  <li><strong>Credential rotation</strong> — if a credential is shared frequently with many parties, the underlying problem is probably that the system needs better access controls, not a better sharing mechanism</li>
</ul>

<h2 id="getting-started">Getting Started</h2>

<p><a href="https://pwpush.com">Password Pusher</a> is free for basic sharing — no account required. <a href="https://pwpush.com/pricing">Premium</a> adds file attachments, auto-dispatch email delivery, and custom branding so contractors see your domain and logo instead of pwpush.com.</p>

<p>The <a href="https://github.com/pglombardo/PasswordPusher">open source edition</a> can be self-hosted on your own infrastructure if your security policy requires it. The security-critical code — encryption, data handling, expiry, audit logging — is fully auditable on GitHub.</p>

<p>For API-driven workflows (onboarding automation, CI/CD credential delivery), the <a href="https://pwpush.com/help/api">JSON API</a> supports everything the web interface does.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="credential-sharing" /><category term="contractors" /><category term="vendors" /><category term="best-practices" /><summary type="html"><![CDATA[Contractors are outside your org. You can't add them to your vault. Here's how to share credentials securely with external parties — and collect them back.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/share-credentials-contractors.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/share-credentials-contractors.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Credential Sharing for AI Agents</title><link href="https://docs.pwpush.com/posts/2026-08-10-Credential-Sharing-for-AI-Agents/" rel="alternate" type="text/html" title="Credential Sharing for AI Agents" /><published>2026-08-10T00:00:00-04:00</published><updated>2026-08-10T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Credential-Sharing-for-AI-Agents</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-08-10-Credential-Sharing-for-AI-Agents/"><![CDATA[<p><strong>TL;DR:</strong> AI agents need credentials to call APIs, access databases, and interact with services. The dominant approach — persistent vault access with scoped runtime fetch — is appropriate for production systems. But many agent workflows are better served by ephemeral credential handoff: deliver the credential via a self-destructing link that the agent reads once and that ceases to exist afterward. No vault integration, no standing access, no persistent secret in the delivery channel. Password Pusher does this via its REST API.</p>

<!-- more -->

<h2 id="ai-agents-have-a-credential-problem">AI agents have a credential problem</h2>

<p>Every useful AI agent eventually needs a credential. An API key for a third-party service, a database password for a migration script, an OAuth token for a customer’s system, a license key for a deployment. The agent cannot do its job without the secret, and someone — or something — has to deliver it.</p>

<p>This is not a theoretical concern. A <a href="https://www.gravitee.io/blog/state-of-ai-agent-security-2026-report-when-adoption-outpaces-control">2026 survey of 919 executives and practitioners</a> found that 88% had confirmed or suspected a security incident involving AI agents. A separate <a href="https://venturebeat.com/security/ai-agents-are-part-of-your-team-now-heres-how-to-secure-all-of-them">Pulse Research study</a> (107 enterprises, July 2026) found that 69% have credential sharing somewhere in their agent fleet — and those organizations experienced incidents at a 63.5% rate, compared to 40.9% for organizations that give every agent its own scoped identity.</p>

<p>The Cloud Security Alliance published <a href="https://cloudsecurityalliance.org/artifacts/defining-non-human-identity">guidance in July 2026</a> recommending that organizations treat AI agent identities as a separate governance category, with dedicated lifecycle policies for the credentials they carry. Microsoft expanded its <a href="https://www.microsoft.com/en-us/security/blog/2026/08/04/advance-zero-trust-for-ai-new-tools-and-guidance-to-secure-ai-agents-and-devSecOps/">Zero Trust framework</a> specifically to address AI agent credential management.</p>

<p>The patterns driving these incidents are familiar: credentials hardcoded in agent configurations, API keys in environment variables that never rotate, secrets pasted into prompts or stored in agent memory. The same patterns that made <code class="language-plaintext highlighter-rouge">.env</code> files the leading source of credential leaks in traditional software, now replicated in agent workflows.</p>

<h2 id="two-models-for-giving-agents-credentials">Two models for giving agents credentials</h2>

<p>The approaches emerging in the market split into two categories.</p>

<p><strong>Persistent vault access.</strong> The agent authenticates to a secrets vault at runtime and fetches scoped, time-limited credentials on demand. Bitwarden’s Agent Access SDK, 1Password’s integrations for Claude and Codex, and C1’s Agentic Vault all follow this model. The agent maintains an ongoing relationship with the vault. This is the right approach for production systems that run continuously, access multiple services, and need automated credential rotation.</p>

<p><strong>Ephemeral handoff.</strong> The credential is delivered to the agent via a one-time channel — a self-destructing link, a short-lived token, a temporary endpoint — that ceases to exist after the agent consumes it. There is no vault relationship. There is no standing access to revoke. The credential was delivered, consumed, and the delivery mechanism destroyed itself.</p>

<p>These are not competing models. They solve different problems.</p>

<h2 id="when-ephemeral-handoff-is-the-right-choice">When ephemeral handoff is the right choice</h2>

<p>Persistent vault access makes sense when an agent runs continuously, accesses many services, and needs credentials that rotate automatically. It is infrastructure.</p>

<p>Ephemeral handoff makes sense when:</p>

<ul>
  <li>
    <p><strong>A human is giving a credential to an agent for a specific task.</strong> An IT admin passing a database password to a migration agent. A developer sharing an API key with a coding assistant for a single session. A security team provisioning a temporary access token for an audit workflow.</p>
  </li>
  <li>
    <p><strong>The credential should not persist in the delivery channel.</strong> Pasting an API key into a chat prompt means it lives in chat history indefinitely. Emailing a password means it sits in an inbox. A self-destructing link eliminates the credential from the channel after it has been read.</p>
  </li>
  <li>
    <p><strong>You need an audit trail for the handoff itself.</strong> When was the credential shared? Was it accessed? By whom? When did it expire? These questions matter for compliance, and they require the delivery mechanism to track its own lifecycle — not just the credential’s.</p>
  </li>
  <li>
    <p><strong>The agent workflow is ad-hoc, not continuous.</strong> Many agent interactions are one-off: a consultant running a diagnostic, a support engineer accessing a customer environment, a developer testing against a staging API. These do not justify vault integration.</p>
  </li>
</ul>

<h2 id="how-this-works-with-password-pusher">How this works with Password Pusher</h2>

<p>Password Pusher’s <a href="https://pwpush.com/help/api">REST API</a> supports this workflow directly. Create a push with the credential, configure it to expire after one view or a short time window, and hand the URL to the agent.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-X</span> POST https://pwpush.com/api/v2/pushes.json <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_TOKEN"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "push": {
      "payload": "sk-proj-abc123...your-api-key",
      "expire_after_views": 1,
      "expire_after_days": 1,
      "retrieval_step": true,
      "note": "API key for migration agent - task #4821"
    }
  }'</span>
</code></pre></div></div>

<p>The response includes a URL. The agent (or the agent’s operator) retrieves the credential from that URL. After one view, the push is destroyed. The audit log records when it was created, when it was viewed, and from which IP address.</p>

<p>A few details that matter for agent workflows:</p>

<ul>
  <li><strong><code class="language-plaintext highlighter-rouge">retrieval_step: true</code></strong> adds a confirmation step before revealing the payload. This prevents email security scanners and URL preview bots from consuming the single view before the agent can.</li>
  <li><strong><code class="language-plaintext highlighter-rouge">note</code></strong> is an encrypted private field. Use it to link the push back to the workflow or ticket that triggered it — useful for audit trails.</li>
  <li><strong><code class="language-plaintext highlighter-rouge">expire_after_views: 1</code></strong> means exactly one retrieval. Combined with a short <code class="language-plaintext highlighter-rouge">expire_after_days</code>, the credential exists in the delivery channel for the minimum possible window.</li>
  <li>The push payload is encrypted at rest with AES-256-GCM. The encryption layer is <a href="https://github.com/pglombardo/PasswordPusher">open source and auditable</a>.</li>
</ul>

<p>For automated workflows, the same API call can be made from a CI/CD pipeline, a runbook, or an orchestration layer. The pattern is the same: create, deliver, consume, destroy.</p>

<h2 id="where-this-might-not-be-the-right-fit">Where this might not be the right fit</h2>

<p>Ephemeral handoff is not a vault replacement. If your agent needs to access the same credential repeatedly across sessions, rotate credentials automatically, or manage a portfolio of secrets for multiple services, you need a secrets manager. Password Pusher does not store credentials persistently and does not do runtime credential injection.</p>

<p>It is also not a zero-knowledge system. The server encrypts payloads at rest, but the payload is decrypted server-side for retrieval. If your threat model requires that the server operator never sees the plaintext, you need a client-side encryption tool.</p>

<p>What it does well is the handoff itself: get a credential from point A to point B, verify it was received, and ensure it does not linger in the channel afterward.</p>

<h2 id="availability">Availability</h2>

<p>The <a href="https://pwpush.com/help/api">REST API</a> is available on all editions of Password Pusher: the free hosted service at <a href="https://pwpush.com">pwpush.com</a>, paid plans with additional features (file attachments, team policies, SSO), and the <a href="https://github.com/pglombardo/PasswordPusher">open source self-hosted edition</a>.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="ai-agents" /><category term="credential-security" /><category term="ephemeral-sharing" /><category term="api" /><summary type="html"><![CDATA[AI agents need credentials to do useful work. The industry is building persistent vault access. There is a simpler model for many use cases: give the agent a self-destructing link, it reads the credential once, and the secret stops existing in the distribution channel.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/credential-sharing-ai-agents.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/credential-sharing-ai-agents.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Webhooks: Real-Time Event Notifications for Your Workspace</title><link href="https://docs.pwpush.com/posts/2026-08-07-Webhooks-Real-Time-Event-Notifications-for-Your-Workspace/" rel="alternate" type="text/html" title="Webhooks: Real-Time Event Notifications for Your Workspace" /><published>2026-08-07T00:00:00-04:00</published><updated>2026-08-07T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Webhooks-Real-Time-Event-Notifications-for-Your-Workspace</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-08-07-Webhooks-Real-Time-Event-Notifications-for-Your-Workspace/"><![CDATA[<p><strong>TL;DR:</strong> Password Pusher Pro on <a href="https://pwpush.com">pwpush.com</a> now supports webhooks (beta). Configure an HTTPS endpoint in your workspace, choose which events to subscribe to, and receive signed JSON notifications when pushes and requests are created, viewed, or expire. Payloads contain metadata only — secret content is never included. Deliveries are signed with the <a href="https://www.standardwebhooks.com/">Standard Webhooks</a> specification and verifiable with common SDKs.</p>

<!-- more -->

<h2 id="why-webhooks">Why Webhooks</h2>

<p>Until now, keeping external systems in sync with Password Pusher meant polling the API or checking the dashboard manually. If you wanted a Slack notification when a credential request got a response, or a log entry when a push was first viewed, you had to build that polling loop yourself and accept the delay.</p>

<p>Webhooks invert that. Instead of your system asking Password Pusher “did anything happen?”, Password Pusher tells your system the moment something does. That opens up a set of workflows that were previously impractical: triggering a follow-up action when a push expires, logging delivery events to a SIEM, alerting a channel when a credential request gets a response, or feeding push activity into an internal dashboard.</p>

<h2 id="how-it-works">How It Works</h2>

<p>Webhooks are configured per workspace. Workspace admins can create up to 5 endpoints, each subscribed to the specific events that matter for that integration.</p>

<p>To set one up:</p>

<ol>
  <li>Sign in on <a href="https://us.pwpush.com">us.pwpush.com</a> or <a href="https://eu.pwpush.com">eu.pwpush.com</a> with an active Pro subscription.</li>
  <li>Open <strong>Workspace → Policy → Webhooks</strong>.</li>
  <li>Choose <strong>Add Webhook</strong>.</li>
  <li>Provide a name, your HTTPS endpoint URL, generate a signing secret, and select which events should trigger deliveries.</li>
  <li>Save and enable.</li>
</ol>

<p>When a subscribed event occurs, Password Pusher sends an HTTPS <code class="language-plaintext highlighter-rouge">POST</code> to your endpoint with a JSON body containing metadata about the event.</p>

<h2 id="supported-events">Supported Events</h2>

<p>You can subscribe to any combination of push and request events:</p>

<table>
  <thead>
    <tr>
      <th>Event</th>
      <th>Payload <code class="language-plaintext highlighter-rouge">type</code></th>
      <th>Triggered when</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Push creation</td>
      <td><code class="language-plaintext highlighter-rouge">push.created</code></td>
      <td>A push is created</td>
    </tr>
    <tr>
      <td>Push first view</td>
      <td><code class="language-plaintext highlighter-rouge">push.first_viewed</code></td>
      <td>The push page is viewed for the first time</td>
    </tr>
    <tr>
      <td>Push expiration</td>
      <td><code class="language-plaintext highlighter-rouge">push.expired</code></td>
      <td>The push expires (manual, timed, or last-view)</td>
    </tr>
    <tr>
      <td>Request creation</td>
      <td><code class="language-plaintext highlighter-rouge">request.created</code></td>
      <td>A request is created</td>
    </tr>
    <tr>
      <td>Request first view</td>
      <td><code class="language-plaintext highlighter-rouge">request.first_viewed</code></td>
      <td>The request page is viewed for the first time</td>
    </tr>
    <tr>
      <td>Response received</td>
      <td><code class="language-plaintext highlighter-rouge">request.response_received</code></td>
      <td>A response is submitted to a request</td>
    </tr>
    <tr>
      <td>Request close</td>
      <td><code class="language-plaintext highlighter-rouge">request.closed</code></td>
      <td>The request is closed</td>
    </tr>
  </tbody>
</table>

<p>Only events you subscribe to will generate deliveries. You can change your subscriptions at any time by editing the webhook.</p>

<h2 id="what-your-endpoint-receives">What Your Endpoint Receives</h2>

<p>Each delivery is an HTTPS <code class="language-plaintext highlighter-rouge">POST</code> with a JSON body and a set of standard headers:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"push.created"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"occurred_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2026-08-07T10:30:00.000000Z"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"workspace"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"acct_oxQdpMWVm"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Your Corporation"</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"metadata"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"has_files"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
    </span><span class="p">},</span><span class="w">
    </span><span class="nl">"push"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"url_token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fjah-38fj2lanvbfke"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2026-08-07T10:30:00.000000Z"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"expires_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2026-08-08T10:30:00.000000Z"</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Request events use a <code class="language-plaintext highlighter-rouge">request</code> object instead of <code class="language-plaintext highlighter-rouge">push</code>, and <code class="language-plaintext highlighter-rouge">request.response_received</code> also includes <code class="language-plaintext highlighter-rouge">responded_at</code> and <code class="language-plaintext highlighter-rouge">metadata.include_requestor</code>.</p>

<p>The payload is metadata only. Secret content — push payloads, passphrases, request responses — is never included in webhook deliveries. If your workflow needs the actual content, retrieve it through the Password Pusher UI or API v2.</p>

<h2 id="delivery-headers">Delivery Headers</h2>

<p>Every delivery includes these headers:</p>

<table>
  <thead>
    <tr>
      <th>Header</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">Content-Type</code></td>
      <td><code class="language-plaintext highlighter-rouge">application/json</code></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">User-Agent</code></td>
      <td><code class="language-plaintext highlighter-rouge">Password-Pusher-Webhook/1.0</code></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">webhook-id</code></td>
      <td>Unique message ID (<code class="language-plaintext highlighter-rouge">msg_...</code>) for idempotency</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">webhook-timestamp</code></td>
      <td>Unix timestamp used for signing</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">webhook-signature</code></td>
      <td>Standard Webhooks signature (<code class="language-plaintext highlighter-rouge">v1,...</code>)</td>
    </tr>
  </tbody>
</table>

<p>Your endpoint must use HTTPS, resolve to a public host, and return an HTTP 2xx status for the delivery to be considered successful.</p>

<h2 id="signature-verification">Signature Verification</h2>

<p>Deliveries are signed using the <a href="https://www.standardwebhooks.com/">Standard Webhooks</a> specification. When you create a webhook, you generate a signing secret (<code class="language-plaintext highlighter-rouge">whsec_...</code>) that Password Pusher uses to sign each delivery. Your endpoint verifies the signature against the raw request body using the <code class="language-plaintext highlighter-rouge">webhook-id</code>, <code class="language-plaintext highlighter-rouge">webhook-timestamp</code>, and <code class="language-plaintext highlighter-rouge">webhook-signature</code> headers.</p>

<p>The advantage of Standard Webhooks is that you do not need to write custom crypto. Official verification libraries exist for Python, JavaScript/TypeScript, Ruby, Go, Java, and other languages. Most of them handle timestamp tolerance checks as well, so you get replay protection for free.</p>

<p>Store your signing secret securely. It is encrypted at rest in Password Pusher and shown only once at creation — after that, the UI shows it as configured but does not redisplay the full value.</p>

<h2 id="retries-and-idempotency">Retries and Idempotency</h2>

<p>Transient failures — timeouts, connection errors, HTTP 5xx, or 429 responses — are retried automatically, up to 3 attempts with increasing delay. Permanent failures (other non-2xx responses, blocked hosts) are marked failed and logged.</p>

<p>Every delivery carries a unique message ID (<code class="language-plaintext highlighter-rouge">msg_...</code>) in the <code class="language-plaintext highlighter-rouge">webhook-id</code> header. Retries reuse the same message ID, so your endpoint may receive the same event more than once with an identical <code class="language-plaintext highlighter-rouge">webhook-id</code>. Treat it as an idempotency key: record the IDs you have already processed and skip duplicates.</p>

<p>Both successful and failed deliveries appear in the push or request audit log, and on the webhook’s <strong>Recent Deliveries</strong> list in the dashboard. Failed deliveries can be retried manually from the UI.</p>

<h2 id="security-notes">Security Notes</h2>

<p>A few implementation details worth mentioning:</p>

<ul>
  <li><strong>HTTPS only.</strong> HTTP endpoints are rejected at configuration time.</li>
  <li><strong>SSRF protection.</strong> Private and loopback destinations (localhost, internal IPs) are blocked to reduce server-side request forgery risk.</li>
  <li><strong>Metadata only.</strong> The security-by-design principle here is straightforward: webhooks tell your system that something happened, not what the secret was. This means a compromised webhook endpoint cannot leak secret content.</li>
  <li><strong>Audit trail.</strong> Webhook delivery events are recorded alongside push and request lifecycle events in the existing audit log.</li>
</ul>

<h2 id="where-this-might-not-be-the-right-fit">Where This Might Not Be the Right Fit</h2>

<p>Webhooks are currently available on the hosted service (pwpush.com) for Pro plans only. If you are running a self-hosted deployment, webhooks are not yet available — that is on the roadmap.</p>

<p>Webhook deliveries are asynchronous and best-effort with retries. If your integration requires guaranteed, exactly-once delivery with strict ordering, webhooks alone may not be sufficient — you would want to combine them with periodic API polling as a consistency check.</p>

<p>Also, webhooks deliver metadata, not content. If your workflow requires the actual push payload or request response, you will need a follow-up API call to retrieve it. This is intentional — it keeps the security surface of webhooks narrow.</p>

<h2 id="availability">Availability</h2>

<p>Webhooks are available now on <a href="https://pwpush.com">pwpush.com</a> for Pro plans, currently in beta. We are still refining the experience and welcome feedback.</p>

<p>Full documentation is available at <a href="https://docs.pwpush.com/docs/webhooks/">docs.pwpush.com/docs/webhooks/</a>.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Features" /><category term="webhooks" /><category term="api" /><category term="automation" /><category term="enterprise" /><category term="integrations" /><summary type="html"><![CDATA[Password Pusher Pro now supports webhooks — receive signed HTTPS notifications when push and request events happen in your workspace. Metadata only, never secret content.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/webhooks.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/webhooks.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Authenticated Recipients: Verify Who Views Your Secrets</title><link href="https://docs.pwpush.com/posts/2026-07-15-Authenticated-Recipients-Verify-Who-Views-Your-Secrets/" rel="alternate" type="text/html" title="Authenticated Recipients: Verify Who Views Your Secrets" /><published>2026-07-15T00:00:00-04:00</published><updated>2026-07-15T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Authenticated-Recipients-Verify-Who-Views-Your-Secrets</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-07-15-Authenticated-Recipients-Verify-Who-Views-Your-Secrets/"><![CDATA[<p><strong>TL;DR:</strong> Password Pusher now supports Authenticated Recipients — email-based identity verification for pushes and requests. When enabled, recipients must enter their email and a 6-digit one-time code before the secret is revealed. The code is single-use, rate-limited, and hashed before storage. Available on <a href="https://pwpush.com">pwpush.com</a> for Premium, Pro, and Enterprise plans, with Self-Hosted Pro support coming in the next release.</p>

<!-- more -->

<h2 id="the-gap-between-access-control-and-identity-verification">The Gap Between Access Control and Identity Verification</h2>

<p>Password Pusher has always offered two ways to restrict access to a secret link: view limits and passphrases. Both serve their purpose, but neither answers a more fundamental question — is the person opening this link actually the person I sent it to?</p>

<p>A passphrase is a shared secret. Anyone who has it can use it. It has to be communicated through a separate channel, and it can be forwarded just as easily as the link itself. View limits cap how many times a link can be opened, but they don’t distinguish between the intended recipient and someone who happened to get the forwarded link first.</p>

<p>Authenticated Recipients addresses this directly. Instead of proving you have a code, you prove you <em>are</em> the intended recipient — by demonstrating control of the email address the sender authorized.</p>

<h2 id="how-it-works">How It Works</h2>

<p>When you create a push using Auto-Dispatch (which emails the secret link to recipients on your behalf), a new option appears: <strong>Require Email Verification</strong>.</p>

<p>With this enabled, anyone who opens the secret link sees an email challenge before the payload is revealed:</p>

<ol>
  <li>The recipient enters their email address.</li>
  <li>If the email matches the authorized recipient list, a 6-digit one-time code is sent.</li>
  <li>The recipient enters the code to unlock the secret.</li>
  <li>The code is single-use and expires quickly.</li>
</ol>

<p>If the email doesn’t match the allowlist, the same interface is shown — but no code is sent. This is deliberate: no information leaks about who was supposed to receive the secret, and there’s no way to enumerate the recipient list by probing.</p>

<h2 id="what-this-means-for-compliance">What This Means for Compliance</h2>

<p><img src="/assets/images/posts/2026/authenticated-recipients-audit-log.png" alt="" class="align-center" /></p>

<p>For organizations that need to demonstrate controlled delivery of sensitive information, the audit trail now includes identity verification events alongside view events. The difference matters: previously, audit logs could show that <em>someone</em> viewed a secret at a given time from a given IP. Now they can show that the viewer proved their identity before accessing the content.</p>

<p>This is relevant for security questionnaires, internal compliance policies, and any workflow where “prove it was delivered to the right person” is a requirement — not just “prove it was delivered.”</p>

<h2 id="stacking-with-existing-controls">Stacking With Existing Controls</h2>

<p>Authenticated Recipients integrates with the features you already use:</p>

<ul>
  <li><strong>Auto-Dispatch.</strong> The recipient list comes from the same emails you’re already sending to. The verification checkbox is a single additional option on the push creation form.</li>
  <li><strong>Passphrases.</strong> Both controls can be active simultaneously. The recipient verifies their email <em>and</em> enters a passphrase. The flow handles each step in sequence.</li>
  <li><strong>Requests.</strong> This works for credential requests too — when someone submits a response to your request, they verify their identity first.</li>
  <li><strong>Policies.</strong> Account admins can set the default behavior, enforce verification on all pushes, or leave it as a per-push decision for individual users.</li>
</ul>

<h2 id="security-implementation">Security Implementation</h2>

<p>A few details on how the verification is built:</p>

<table>
  <thead>
    <tr>
      <th>Aspect</th>
      <th>Implementation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Code storage</td>
      <td>Hashed before storage (not stored in plaintext)</td>
    </tr>
    <tr>
      <td>Brute-force protection</td>
      <td>Rate limiting on verification attempts</td>
    </tr>
    <tr>
      <td>Replay prevention</td>
      <td>Signed access cookies scoped to the verified session</td>
    </tr>
    <tr>
      <td>View count integrity</td>
      <td>Failed verification attempts do not burn view counts</td>
    </tr>
    <tr>
      <td>Recipient enumeration</td>
      <td>Non-matching emails see the same UX as matching ones</td>
    </tr>
  </tbody>
</table>

<h2 id="where-this-might-not-be-the-right-fit">Where This Might Not Be the Right Fit</h2>

<p>Authenticated Recipients requires Auto-Dispatch recipients — the feature activates when you specify email addresses for automatic delivery. If you’re sharing a link manually (copying it from the preview page and pasting it into a chat message or your own email), there’s no recipient list to verify against. In that case, passphrases remain the access control mechanism.</p>

<p>The verification also depends on email delivery. If your recipient’s email is delayed or filtered to spam, they’ll need to wait for the code to arrive. For time-sensitive scenarios where the recipient is standing next to you, a passphrase is faster.</p>

<h2 id="availability">Availability</h2>

<p>Authenticated Recipients is available now on <a href="https://pwpush.com">pwpush.com</a> for Premium, Pro, and Enterprise plans. It will be included in the next Self-Hosted Pro release.</p>

<p>This has been one of our most requested features — the original <a href="https://github.com/pglombardo/PasswordPusher/discussions/1942">community request</a> dates back to early 2024. I’m glad it’s here.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Features" /><category term="security" /><category term="authentication" /><category term="otp" /><category term="enterprise" /><category term="email" /><summary type="html"><![CDATA[Password Pusher now supports email-based recipient verification. Before viewing a secret, recipients must prove their identity with a one-time code sent to their email.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/authenticated-recipients.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/authenticated-recipients.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">OSS Password Pusher Can Now Email Pushes Directly to Recipients</title><link href="https://docs.pwpush.com/posts/2026-07-04-Password-Pusher-Can-Now-Email-Pushes-Directly-to-Recipients/" rel="alternate" type="text/html" title="OSS Password Pusher Can Now Email Pushes Directly to Recipients" /><published>2026-07-04T00:00:00-04:00</published><updated>2026-07-04T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Password-Pusher-Can-Now-Email-Pushes-Directly-to-Recipients</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-07-04-Password-Pusher-Can-Now-Email-Pushes-Directly-to-Recipients/"><![CDATA[<p><strong>TL;DR:</strong> Starting with v2.9.0, OSS Password Pusher can automatically email your pushes directly to recipients. Enter one or more email addresses when creating a push, and the application sends the secret link on your behalf — with full audit logging and support for 30+ languages. Available from the UI and the API.</p>

<p>This is a <a href="https://docs.pwpush.com/posts/feature-pipeline/">Feature Pipeline</a> release: auto-dispatch has been available on <a href="https://pwpush.com">pwpush.com</a> as part of the Pro edition, and is now included in OSS Password Pusher for all self-hosted deployments.</p>

<!-- more -->

<h2 id="the-copy-paste-problem">The Copy-Paste Problem</h2>

<p>Every secret-sharing tool works roughly the same way: you create a self-destructing link, copy it, and then paste it into an email or chat message to send it along.</p>

<p>That last step — the manual copy-paste — has always been a minor annoyance for individual users and a real bottleneck for teams and MSPs who share credentials dozens of times a day. It also means the delivery method is entirely outside the application, so there’s no audit trail of <em>who</em> the link was sent to, only who viewed it.</p>

<p>v2.9.0 closes that gap.</p>

<h2 id="what-is-auto-dispatch">What Is Auto-Dispatch?</h2>

<p>When you create a push, you can now enter one or more recipient email addresses directly in the form. OSS Password Pusher will email the secret link to each recipient on your behalf, with a clear message explaining what it is, how long it lasts, and what to expect.</p>

<p>A few things worth noting:</p>

<ul>
  <li><strong>Up to 5 recipients per push.</strong> You can send to multiple people at once, comma-separated.</li>
  <li><strong>Language selection.</strong> Choose the language for the email and the secret link page. This is useful when your recipients speak a different language — Password Pusher supports over 30 locales.</li>
  <li><strong>Available on all push types.</strong> Text pushes, file pushes, URL pushes and QR pushes all support auto-dispatch.</li>
  <li><strong>Works from the preview page too.</strong> Forgot to add recipients when creating? You can send the email from the push preview page after creation.</li>
</ul>

<h2 id="what-does-the-recipient-see">What Does the Recipient See?</h2>

<p>Recipients receive an email with the secret link, who sent it, how long the link is valid, and a note about passphrases if one was set. The email is clean and straightforward — no marketing, no branding distractions.</p>

<h2 id="full-audit-trail">Full Audit Trail</h2>

<p>Every auto-dispatch action is recorded in the push audit log. You can see:</p>

<ul>
  <li>When the email was queued</li>
  <li>Who it was sent to</li>
  <li>The delivery status: pending, processing, completed, partially failed, or failed</li>
  <li>Any error messages if delivery didn’t succeed</li>
</ul>

<p>This is important for compliance and accountability. Previously, if you shared a link via email manually, Password Pusher had no record of who you sent it to — only who eventually viewed it. Now, the full lifecycle is tracked: creation → email dispatch → each view → expiration.</p>

<h2 id="how-does-it-work-under-the-hood">How Does It Work Under the Hood?</h2>

<p>Auto-dispatch activates automatically when SMTP is configured on your instance. If your instance can send email, the auto-dispatch fields appear in the push creation form for signed-in users.</p>

<p>When a push with recipients is created, the application enqueues a background job that delivers one email per recipient. The job has built-in retry logic for transient SMTP failures.</p>

<p>There’s a configurable daily limit per user (default: 500 emails/day) to prevent abuse, and you can disable the feature entirely if you don’t want it.</p>

<h3 id="configuration">Configuration</h3>

<p>Two new environment variables:</p>

<table>
  <thead>
    <tr>
      <th>Variable</th>
      <th>Default</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">PWP__NOTIFY_BY_EMAIL__ENABLED</code></td>
      <td><code class="language-plaintext highlighter-rouge">true</code></td>
      <td>Set to <code class="language-plaintext highlighter-rouge">false</code> to fully disable auto-dispatch (hides UI, blocks API).</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">PWP__NOTIFY_BY_EMAIL__DAILY_LIMIT</code></td>
      <td><code class="language-plaintext highlighter-rouge">500</code></td>
      <td>Per-user daily email cap. Set to <code class="language-plaintext highlighter-rouge">0</code> to block sends (UI still visible), leave unset for unlimited.</td>
    </tr>
  </tbody>
</table>

<p>Or in <code class="language-plaintext highlighter-rouge">settings.yml</code>:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">notify_by_email</span><span class="pi">:</span>
  <span class="na">enabled</span><span class="pi">:</span> <span class="kc">true</span>       <span class="c1"># Set to false to fully disable</span>
  <span class="na">daily_limit</span><span class="pi">:</span> <span class="m">500</span>    <span class="c1"># Set to 0 to block sends, null for unlimited</span>
</code></pre></div></div>

<p>For the full configuration reference, see the <a href="https://docs.pwpush.com/docs/notify-by-email/">Notify by Email documentation</a>.</p>

<h2 id="api-support">API Support</h2>

<p>The JSON API v2 supports auto-dispatch in two ways:</p>

<p><strong>1. On push creation</strong> — include <code class="language-plaintext highlighter-rouge">notify_emails_to</code> and optional <code class="language-plaintext highlighter-rouge">notify_emails_to_locale</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-X</span> POST <span class="s2">"https://your-instance.com/api/v2/pushes.json"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_TOKEN"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "push": {
      "payload": "my-secret-password",
      "expire_after_days": 3,
      "expire_after_views": 5,
      "notify_emails_to": "alice@example.com, bob@example.com",
      "notify_emails_to_locale": "fr"
    }
  }'</span>
</code></pre></div></div>

<p><strong>2. For existing pushes</strong> — send notifications after creation:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-X</span> POST <span class="s2">"https://your-instance.com/api/v2/pushes/YOUR_URL_TOKEN/notify_emails"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_TOKEN"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "notify_emails_to": "alice@example.com",
    "notify_emails_to_locale": "en"
  }'</span>
</code></pre></div></div>

<p>The audit log endpoint also returns email dispatch events, so you can programmatically check delivery status.</p>

<p>For teams and MSPs who script their credential sharing workflows, this is a meaningful improvement: you can now create a push <em>and</em> deliver it to the recipient in a single API call.</p>

<h2 id="feature-pipeline">Feature Pipeline</h2>

<p>Auto-dispatch has been part of the Pro edition on <a href="https://pwpush.com">pwpush.com</a> for some time. With v2.9.0, it’s now included in OSS Password Pusher for all self-hosted deployments.</p>

<p>This is how the <a href="https://docs.pwpush.com/posts/feature-pipeline/">Feature Pipeline</a> works: Pro subscribers on pwpush.com get early access to new features, and over time, those features move into the open-source codebase. Subscribers fund the development; OSS Password Pusher is the eventual beneficiary.</p>

<p>If you’re running a self-hosted instance, upgrade to v2.9.0 and make sure SMTP is configured — the feature activates automatically from there.</p>

<h2 id="where-this-might-not-be-the-right-fit">Where This Might Not Be the Right Fit</h2>

<p>Auto-dispatch sends emails through your instance’s configured SMTP server. If your SMTP provider has strict sending limits (e.g., Gmail’s 500/day for personal accounts), the daily cap setting lets you stay within those limits. For high-volume use cases, a transactional email provider like SendGrid or Amazon SES is recommended.</p>

<p>Also, auto-dispatch requires signed-in users — anonymous pushes can’t trigger email notifications, by design. This prevents the feature from being used for spam.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Features" /><category term="auto-dispatch" /><category term="email" /><category term="feature-pipeline" /><category term="self-hosted" /><category term="api" /><summary type="html"><![CDATA[OSS Password Pusher v2.9.0 adds built-in auto-dispatch: automatically email self-destructing secret links to recipients from the UI or API, with full audit logging and locale support.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/auto-dispatch-email.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/auto-dispatch-email.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to Securely Collect Passwords from Clients</title><link href="https://docs.pwpush.com/posts/2026-06-30-how-to-securely-collect-passwords-from-clients/" rel="alternate" type="text/html" title="How to Securely Collect Passwords from Clients" /><published>2026-06-29T00:00:00-04:00</published><updated>2026-06-29T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/how-to-securely-collect-passwords-from-clients</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-06-30-how-to-securely-collect-passwords-from-clients/"><![CDATA[<p><strong>Quick answer:</strong> Create a <a href="https://pwpush.com/requests">Request</a> — a secure, one-time submission link that you send to the person who has the credentials. They paste the password into an encrypted form, and you receive it through an audit-logged, self-destructing link. No account required for the sender. No passwords in email or chat.</p>

<!-- more -->

<h2 id="the-problem-everyone-knows-about">The Problem Everyone Knows About</h2>

<p>If you work in IT, run a web agency, manage infrastructure for clients, or handle onboarding for any kind of service — you’ve been in this situation. You need a password from someone. A client, a vendor, a new hire, a colleague in another department.</p>

<p>So you ask for it. And what happens next is almost always the same.</p>

<p>They email it to you. Or they paste it into a Slack message. Or a Teams chat. Or a shared Google Doc. Or — and this one still surprises me — a text message.</p>

<p>That password now lives in a system designed to keep messages forever. Searchable, forwardable, sitting in logs and backups long after anyone remembers it exists. Every compliance framework tells you not to do this. Everyone does it anyway, because there hasn’t been a simple alternative.</p>

<h2 id="what-securely-actually-means-here">What “Securely” Actually Means Here</h2>

<p>There are a few properties that matter when collecting credentials from someone:</p>

<ul>
  <li><strong>Encrypted in transit and at rest.</strong> The password should never be visible as plain text in a database, an inbox, or a log file.</li>
  <li><strong>Self-destructing.</strong> Once you’ve retrieved the credential, the data should be permanently deleted. Not archived. Not soft-deleted. Gone.</li>
  <li><strong>Audit-logged.</strong> You should know exactly when the credential was submitted and when it was retrieved — for your own records and for compliance.</li>
  <li><strong>No account required for the sender.</strong> If collecting a password requires your client to sign up for a service, install an app, or figure out PGP, they’ll just email it to you instead.</li>
</ul>

<p>That last point is the one most solutions get wrong.</p>

<h2 id="the-old-way-vs-the-new-way">The Old Way vs. the New Way</h2>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>Email / Chat</th>
      <th>Password Manager Sharing</th>
      <th>Request Link</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Credentials in plain text?</td>
      <td>Yes — stored in inbox/logs forever</td>
      <td>No — encrypted in vault</td>
      <td>No — AES-256, deleted after retrieval</td>
    </tr>
    <tr>
      <td>Self-destructs?</td>
      <td>No</td>
      <td>No — persists in vault</td>
      <td>Yes — configurable by views or time</td>
    </tr>
    <tr>
      <td>Requires sender to have an account?</td>
      <td>No</td>
      <td>Yes — same password manager</td>
      <td>No</td>
    </tr>
    <tr>
      <td>Audit trail?</td>
      <td>No</td>
      <td>Varies</td>
      <td>Yes — full lifecycle logging</td>
    </tr>
    <tr>
      <td>Works across organizations?</td>
      <td>Yes</td>
      <td>Rarely — requires shared vault</td>
      <td>Yes</td>
    </tr>
  </tbody>
</table>

<p>Password manager sharing is secure, but it only works when both parties use the same manager — which almost never happens across company boundaries. Request links solve the cross-organization problem.</p>

<h2 id="how-requests-work-in-password-pusher">How Requests Work in Password Pusher</h2>

<p><a href="https://pwpush.com/requests">Requests</a> flip the direction of Password Pusher’s core mechanic. Instead of creating a secret and sending a link to a recipient, you create a <em>request</em> and send the link to the person who <em>has</em> the secret.</p>

<p>Here’s the flow:</p>

<ol>
  <li><strong>You create a Request.</strong> Give it a name (e.g., “Staging server credentials”), set expiry rules, and optionally add your branding.</li>
  <li><strong>You send the Request link.</strong> Email it, message it, put it in a ticket — the link itself contains no sensitive data.</li>
  <li><strong>Your client opens the link and submits their credentials.</strong> The submission is encrypted before it’s stored. No account needed.</li>
  <li><strong>You get notified and retrieve the submission.</strong> Every access is logged. The data self-destructs after your configured limits.</li>
</ol>

<p>The entire exchange is encrypted with AES-256, audit-logged from creation through retrieval, and permanently deleted once it expires.</p>

<h2 id="where-this-fits-in-practice">Where This Fits in Practice</h2>

<p>The most common use cases we see:</p>

<ul>
  <li><strong>MSPs and IT service providers</strong> collecting login credentials during client onboarding</li>
  <li><strong>Web agencies</strong> gathering CMS, hosting, and DNS credentials from new clients</li>
  <li><strong>Internal IT</strong> requesting WiFi passwords, VPN configs, or service account credentials from other departments</li>
  <li><strong>HR and finance</strong> collecting sensitive employee information during onboarding</li>
  <li><strong>Compliance teams</strong> receiving credentials for vendor assessments</li>
</ul>

<p>If you’re already using Password Pusher to <em>send</em> passwords, Requests are the other half of the workflow.</p>

<h2 id="what-about-other-options">What About Other Options?</h2>

<p>A few purpose-built tools have appeared for credential collection — CredentialShare, SecureBin, and various WordPress plugins. They tend to focus narrowly on the intake form and skip the broader workflow: team management, custom domains, white-label branding, file attachments, API access, and self-hosted deployment.</p>

<p>Password Pusher Requests include all of those, and they work consistently whether you’re on the hosted service at <a href="https://pwpush.com">pwpush.com</a> or running a <a href="https://pwpush.com/self-hosted-pricing">self-hosted instance</a> on your own infrastructure.</p>

<h2 id="where-requests-may-not-be-the-right-fit">Where Requests May Not Be the Right Fit</h2>

<p>If you need ongoing, persistent access to a credential — like a shared service account password that multiple team members use daily — a password manager with a shared vault is the right tool. Requests are designed for one-time handoffs, not persistent storage.</p>

<p>If your organization requires SAML-based SSO for every tool in the stack, note that Password Pusher supports OIDC (OAuth2) on the <a href="https://pwpush.com/self-hosted-pricing">self-hosted Enterprise tier</a>. SAML is not currently supported on any tier.</p>

<h2 id="getting-started">Getting Started</h2>

<p>You can <a href="https://pwpush.com/requests">create a Request</a> right now with a free account. The recipient doesn’t need an account — they just open the link and submit.</p>

<p>For teams that need audit trails, branding, and custom domains, those are available on <a href="https://pwpush.com/pricing">Pro plans</a>. For organizations that need to keep everything on their own infrastructure, <a href="https://pwpush.com/self-hosted-pricing">Self-Hosted Pro</a> includes Requests with full API access.</p>

<p>The next time someone asks “just email me the password” — send them a Request link instead.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="requests" /><category term="security" /><category term="credential-sharing" /><category term="best-practices" /><summary type="html"><![CDATA[Stop asking clients to email passwords. Use encrypted, self-destructing request links to collect credentials, API keys, and sensitive files securely.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/securely-collect-passwords.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/securely-collect-passwords.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to Send a Password Protected Email (And Why You Probably Shouldn’t)</title><link href="https://docs.pwpush.com/posts/2026-06-05-How-to-Send-a-Password-Protected-Email/" rel="alternate" type="text/html" title="How to Send a Password Protected Email (And Why You Probably Shouldn’t)" /><published>2026-06-05T00:00:00-04:00</published><updated>2026-06-05T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/How-to-Send-a-Password-Protected-Email</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-06-05-How-to-Send-a-Password-Protected-Email/"><![CDATA[<p>If you searched “how to send a password protected email,” you probably have a password, API key, or some other credential you need to get to someone. Every guide you’ll find will walk you through Gmail Confidential Mode or Outlook’s encryption settings.</p>

<p>Those guides aren’t wrong. But they’re answering the wrong question.</p>

<p>The better question is: <strong>should sensitive information be in an email at all?</strong></p>

<!-- more -->

<h2 id="the-short-answer">The Short Answer</h2>

<p>No. Don’t put the password in the email. Put it behind a one-time link that self-destructs after it’s been read. Send that link through email — or Slack, or Teams, or text. The sensitive data never touches anyone’s inbox.</p>

<p>That’s it. That’s the whole approach. If you want to get started right now, go to <a href="https://pwpush.com">pwpush.com</a>, paste your secret, and you’ll have a link in about five seconds. No account required.</p>

<p>If you want to understand <em>why</em> this is better, keep reading.</p>

<h2 id="whats-wrong-with-password-protected-email">What’s Wrong With Password Protected Email</h2>

<p>Password-protecting an email sounds secure. The problem is what happens after the recipient opens it.</p>

<p><strong>The credential persists.</strong> Once your recipient reads the email, that password now sits in their inbox — indefinitely. It’s in your Sent folder too. Both are backed up, synced across devices, and archived by your email provider. That one credential you sent at 3pm on a Tuesday now exists in a half-dozen places, none of which you control.</p>

<p><strong>Gmail Confidential Mode isn’t encryption.</strong> Google’s own documentation acknowledges this. The recipient can’t forward the email, but they can screenshot it. Google can still scan the contents. And the “expiration” just removes access to the email — it doesn’t delete the data from Google’s servers.</p>

<p><strong>The password-for-the-password problem.</strong> If you encrypt an email, you need to get the decryption password to the recipient somehow. Most people send it in a separate email. So now you have two emails, both in inboxes, both persistent — and anyone who compromises the inbox gets both.</p>

<p><strong>Forwarding and screenshots.</strong> Even with access controls, you can’t prevent someone from copying the text and pasting it somewhere else. The fundamental issue isn’t access control — it’s that email is a persistent medium, and credentials shouldn’t persist.</p>

<h2 id="the-one-time-link-approach">The One-Time Link Approach</h2>

<p>Instead of trying to make email secure, take the sensitive data out of email entirely.</p>

<ol>
  <li>Put the credential behind a one-time link</li>
  <li>Send the link through whatever channel you’d normally use — email, Slack, Teams, text</li>
  <li>The recipient clicks the link and sees the credential</li>
  <li>The link self-destructs. The data is deleted.</li>
</ol>

<p>The email still exists in both inboxes, sure. But it contains a link to something that no longer exists. Anyone who finds that email later — whether through a breach, a forwarded thread, or an old backup — gets nothing.</p>

<h2 id="how-password-pusher-works">How Password Pusher Works</h2>

<p><a href="https://pwpush.com">Password Pusher</a> is built specifically for this:</p>

<ul>
  <li><strong>Paste your secret</strong> at <a href="https://pwpush.com">pwpush.com</a> and set a view limit and expiration</li>
  <li><strong>Get a one-time link</strong> — send it however you want</li>
  <li><strong>Recipient clicks the link</strong> and sees the secret</li>
  <li><strong>The data self-destructs</strong> after the view limit or time limit is reached</li>
</ul>

<p>No account required. No software to install — for you or the recipient.</p>

<p>A few extras that matter: a <strong>retrieval step</strong> that prevents URL preview bots (Slack, Teams, iMessage) from consuming views before your recipient sees them. <strong>Passphrase protection</strong> for an extra layer. An <strong>audit trail</strong> showing when links were accessed. And <strong>auto-dispatch</strong> to <a href="https://pwpush.com/features">email the link directly</a> to the recipient on your behalf.</p>

<p>Password Pusher has been in production since 2011 — over fourteen years. The security-critical code is <a href="https://github.com/pglombardo/PasswordPusher">fully open source</a> and auditable on GitHub. Over 100 million secrets shared. You can use it for free, or get <a href="https://pwpush.com/pricing">Pro features</a> like team collaboration, custom domains, and white-label branding for your organization.</p>

<h2 id="quick-recap">Quick Recap</h2>

<table>
  <thead>
    <tr>
      <th>Approach</th>
      <th>Credential persists?</th>
      <th>Recipient needs account?</th>
      <th>You control the lifecycle?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Password-protected email</td>
      <td>Yes — in both inboxes, backups, archives</td>
      <td>No</td>
      <td>No</td>
    </tr>
    <tr>
      <td>Encrypted email (S/MIME, PGP)</td>
      <td>Yes — once decrypted</td>
      <td>Yes — needs certificates/keys</td>
      <td>No</td>
    </tr>
    <tr>
      <td>One-time link (Password Pusher)</td>
      <td>No — deleted after viewing</td>
      <td>No</td>
      <td>Yes</td>
    </tr>
  </tbody>
</table>

<p>The safest email is the one that doesn’t contain the secret.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="email-security" /><category term="secure-sharing" /><category term="best-practices" /><summary type="html"><![CDATA[Every guide tells you how to password protect an email. Here's why that's the wrong question — and what actually keeps your sensitive data safe.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/password-protected-email.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/password-protected-email.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Password Protected File Sharing — Without the Overhead</title><link href="https://docs.pwpush.com/posts/2026-06-05-Password-Protected-File-Sharing/" rel="alternate" type="text/html" title="Password Protected File Sharing — Without the Overhead" /><published>2026-06-05T00:00:00-04:00</published><updated>2026-06-05T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Password-Protected-File-Sharing</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-06-05-Password-Protected-File-Sharing/"><![CDATA[<p>If you’re looking for a password protected file sharing site, you’ve probably already found a dozen enterprise platforms asking you to set up a client portal, create accounts for your recipients, and commit to a monthly subscription before you can share a single file.</p>

<p>Most of the time, that’s not what you need. You need to get a file to someone securely, know when they’ve accessed it, and have the whole thing disappear when it’s done.</p>

<!-- more -->

<h2 id="the-quick-answer">The Quick Answer</h2>

<p><a href="https://pwpush.com">Password Pusher</a> lets you attach files to a self-destructing link. Upload the file, set an expiration, share the link. The recipient clicks it, downloads the file, and the link expires after the view limit or time limit you set. No account required — for you or the recipient.</p>

<p>If that’s enough to get started, go to <a href="https://pwpush.com">pwpush.com</a> and try it. No signup needed.</p>

<p>If you want to understand the full feature set, keep reading.</p>

<h2 id="how-file-sharing-works-in-password-pusher">How File Sharing Works in Password Pusher</h2>

<p>The workflow is the same whether you’re sharing a text password or a file — or both at the same time.</p>

<ol>
  <li><strong>Go to <a href="https://pwpush.com">pwpush.com</a></strong> and create a new push</li>
  <li><strong>Attach one or more files</strong> alongside any text or notes you want to include</li>
  <li><strong>Set your expiration</strong> — how many views and how many days before the data is deleted</li>
  <li><strong>Get your link</strong> — a unique, one-time URL you can send through email, Slack, Teams, or any other channel</li>
  <li><strong>Share it</strong> — your recipient clicks the link and downloads the files</li>
</ol>

<p>After the view limit or time limit is reached, the files and any associated text are deleted. Not archived somewhere. Deleted. The link goes dead, and anyone who finds it later gets nothing.</p>

<p>You can also add a <strong>passphrase</strong> so the recipient needs both the link and a separate password to access the files — useful when you’re sending something particularly sensitive.</p>

<h2 id="track-who-accessed-your-files">Track Who Accessed Your Files</h2>

<p>This is where Password Pusher goes beyond basic file sharing. Every push comes with a <strong>complete audit trail</strong>:</p>

<ul>
  <li><strong>Who</strong> opened the link — IP address and geographic location</li>
  <li><strong>When</strong> they accessed it — exact timestamp</li>
  <li><strong>How many times</strong> the link has been viewed</li>
  <li><strong>Whether it’s still active</strong> or has expired</li>
</ul>

<p>You can also turn on <strong>access notifications</strong> so you get alerted the moment someone opens your link. For compliance-sensitive workflows — legal, finance, healthcare, IT — knowing exactly when and where a file was accessed isn’t optional. It’s required.</p>

<p>And if you need to revoke access before the expiration? One click. The link dies immediately.</p>

<h2 id="why-not-just-use-dropbox-or-google-drive">Why Not Just Use Dropbox or Google Drive?</h2>

<p>Those platforms are great for ongoing collaboration. But they’re designed for files that stick around — shared folders, persistent access, version histories. That’s the opposite of what you want when sharing sensitive documents with a client or contractor.</p>

<p>When you share a file through a cloud drive:</p>

<ul>
  <li><strong>The file persists</strong> in shared folders, recent files, and backups — indefinitely</li>
  <li><strong>Access is ongoing</strong> unless you remember to revoke it</li>
  <li><strong>Recipients need accounts</strong> on the same platform</li>
  <li><strong>No audit trail</strong> for individual file access at the link level</li>
</ul>

<p>Password Pusher is built for the other use case: <strong>ad-hoc, temporary file delivery where the file should stop existing after it’s been received.</strong></p>

<p>Send a contract draft to a client. Deliver API credentials with supporting documentation. Share tax documents with your accountant. Get configuration files to a contractor. In all of these cases, the file needs to get there, the recipient needs to confirm receipt, and then the file should be gone.</p>

<h2 id="built-for-teams-and-organizations">Built for Teams and Organizations</h2>

<p>If you’re sharing files across a team, <a href="https://pwpush.com/pricing">Password Pusher Pro</a> adds the features organizations need:</p>

<ul>
  <li><strong>Custom domains</strong> — share links from your own domain instead of pwpush.com</li>
  <li><strong>White-label branding</strong> — your logo, your colors, your messaging. Recipients see your brand, not ours</li>
  <li><strong>Team dashboards</strong> — shared visibility into all pushes across your organization</li>
  <li><strong>Workspace policies</strong> — enforce expiration limits, passphrase requirements, and other security rules organization-wide</li>
  <li><strong>API and CLI</strong> — automate file distribution through your existing workflows</li>
</ul>

<p>Pro is available as a hosted service on <a href="https://pwpush.com">pwpush.com</a> — with dedicated <a href="https://eu.pwpush.com">EU</a> and <a href="https://us.pwpush.com">US</a> data regions — or as a <a href="https://pwpush.com/self-hosted-pricing">self-hosted license</a> for organizations that want files on their own infrastructure.</p>

<h2 id="getting-started">Getting Started</h2>

<p>Text and password sharing on <a href="https://pwpush.com">pwpush.com</a> is free — no account required. File sharing is available with <a href="https://pwpush.com/pricing">Premium and Pro subscriptions</a>, starting at $19/month.</p>

<p>If you’d rather self-host, the <a href="https://github.com/pglombardo/PasswordPusher">open source edition</a> includes file sharing out of the box. Deploy it on your own infrastructure and start sharing files immediately.</p>

<p>The platform has been in production for over fourteen years — AES-256 encryption, more than 100 million secrets shared, and a fully auditable open source codebase. No portal. No enterprise contract.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="file-sharing" /><category term="secure-sharing" /><category term="audit-trail" /><summary type="html"><![CDATA[You don't need a portal or an enterprise contract to share files securely. Upload a file, get a self-destructing link, track who accessed it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/password-protected-file-sharing.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/password-protected-file-sharing.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Best Way to Securely Share Passwords (And Why Most People Get It Wrong)</title><link href="https://docs.pwpush.com/posts/2026-06-05-The-Best-Way-to-Securely-Share-Passwords/" rel="alternate" type="text/html" title="The Best Way to Securely Share Passwords (And Why Most People Get It Wrong)" /><published>2026-06-05T00:00:00-04:00</published><updated>2026-06-05T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/The-Best-Way-to-Securely-Share-Passwords</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-06-05-The-Best-Way-to-Securely-Share-Passwords/"><![CDATA[<p>Everybody needs to share a password at some point. A Wi-Fi credential for a guest. A staging server login for a contractor. API keys for a new team member. Database credentials for an auditor.</p>

<p>And almost everybody does it the same way: paste it into an email, drop it in Slack, or text it.</p>

<p>It works. Until it doesn’t.</p>

<!-- more -->

<h2 id="the-problem-with-how-we-share-passwords">The Problem With How We Share Passwords</h2>

<p>When you send a password through email or a messaging app, that credential now lives in multiple places indefinitely — your sent folder, their inbox, the messaging server’s database, backups, email archives, possibly synced to multiple devices. That one password has gone from existing in one place to potentially dozens.</p>

<p>This isn’t a theoretical risk. Credential exposure through persistent messages is one of the top vectors in data breaches. An old Slack DM from 2023 containing a database password is just as dangerous in 2026 if that password hasn’t been rotated — and let’s be honest, it probably hasn’t been.</p>

<p>The best way to securely share passwords is to make sure they don’t persist after they’ve been received.</p>

<h2 id="one-time-links-the-simple-answer">One-Time Links: The Simple Answer</h2>

<p>The concept is straightforward: instead of sending the password directly, you generate a link that contains the password. The recipient clicks the link, sees the password, and the link self-destructs. Gone. No copies lingering in inboxes or message histories.</p>

<p>This is the best way to send passwords whether you’re sharing them with colleagues, clients, or anyone else — because the credential simply stops existing after it’s been read.</p>

<p>What makes this better than the alternatives:</p>

<ul>
  <li><strong>No persistence.</strong> The password doesn’t live in email archives, chat logs, or backup tapes.</li>
  <li><strong>No account required.</strong> The recipient doesn’t need to install anything or create an account. They click a link.</li>
  <li><strong>Audit trail.</strong> You can see when the link was opened, how many times, and whether it expired unused.</li>
  <li><strong>Works everywhere.</strong> Send the link through whatever channel you already use — email, Slack, Teams, text. The channel is just the delivery mechanism. The credential itself is behind the one-time link.</li>
</ul>

<p>This last point matters a lot when you’re sharing passwords with clients. Your client doesn’t want to install your company’s password manager. They don’t want to create an account on a tool they’ll use once. They want to click a link and get the credential. Done.</p>

<h2 id="how-password-pusher-works">How Password Pusher Works</h2>

<p><a href="https://pwpush.com">Password Pusher</a> is built specifically for this. Here’s the workflow:</p>

<ol>
  <li>Go to <a href="https://pwpush.com">pwpush.com</a></li>
  <li>Paste your password or secret</li>
  <li>Set how many views and how many days before it expires</li>
  <li>Click “Push it!” — you get a unique link</li>
  <li>Send that link to your recipient</li>
</ol>

<p>That’s it. When they open the link, they see the password. After the view limit or time limit is reached, the data is deleted. Not archived. Deleted.</p>

<p>A few things that matter in practice:</p>

<p><strong>Retrieval step.</strong> When you send a link via Slack, Teams, or iMessage, URL preview bots will automatically fetch the link before the recipient even sees it. If the tool counts that fetch as a “view,” the secret might already be gone. Password Pusher includes a one-click retrieval step that stops bots from burning your links.</p>

<p><strong>Passphrase protection.</strong> For particularly sensitive credentials, you can add a passphrase. The recipient needs both the link and the passphrase to see the content — a clean two-factor delivery.</p>

<p><strong>Auto-dispatch.</strong> If you’d rather not deal with sending the link yourself, Password Pusher can <a href="https://pwpush.com/features">email it directly to the recipient</a> on your behalf.</p>

<h2 id="why-345000-people-use-it-every-month">Why 345,000+ People Use It Every Month</h2>

<p>Password Pusher has been in production since 2011. Over fourteen years. That’s a long time for a security tool — and longevity matters when you’re trusting something with credentials.</p>

<p>The core application is <a href="https://github.com/pglombardo/PasswordPusher">fully open source</a> on GitHub. Every line of the security-critical code — the encryption (AES-GCM 256-bit), the data handling, the expiry logic, the audit logging — is auditable by anyone. Over 100 million secrets have been shared through the platform.</p>

<p>You can use it for free at <a href="https://pwpush.com">pwpush.com</a> with no account required. Or you can <a href="https://pwpush.com/self-hosted-pricing">self-host it</a> on your own infrastructure if you prefer to keep everything in-house.</p>

<h2 id="apnotic-and-pro-subscriptions">Apnotic and Pro Subscriptions</h2>

<p>In 2024, I founded <a href="https://apnotic.com">Apnotic, LLC</a> to put a proper company behind Password Pusher. The project had grown well beyond a side project, and it needed the support structure to match.</p>

<p><a href="https://pwpush.com/pricing">Password Pusher Pro</a> is the subscription tier for teams and organizations. It adds team collaboration, custom domains, white-label branding, file sharing, and workspace-level policies — the features that matter when you’re using Password Pusher across a team rather than individually.</p>

<p>Pro is available both as a hosted service on <a href="https://pwpush.com">pwpush.com</a> — with dedicated <a href="https://eu.pwpush.com">EU</a> and <a href="https://us.pwpush.com">US</a> data regions — and as a <a href="https://pwpush.com/self-hosted-pricing">self-hosted license</a> for organizations that need credentials on their own infrastructure.</p>

<p>The free tier isn’t going anywhere. It’s the foundation of the project and always will be. Pro is for the organizations that need more.</p>

<hr />

<p><em>Peter Giacomo Lombardo — <a href="https://apnotic.com">Apnotic, LLC</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="secure-sharing" /><category term="passwords" /><category term="best-practices" /><summary type="html"><![CDATA[Most people share passwords through email, Slack, or text messages. Here's why that's a problem and how one-time links solve it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/best-way-to-securely-share-passwords.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/best-way-to-securely-share-passwords.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What Is a One-Time Password Link (And How to Create One)</title><link href="https://docs.pwpush.com/posts/2026-06-05-What-Is-a-One-Time-Password-Link/" rel="alternate" type="text/html" title="What Is a One-Time Password Link (And How to Create One)" /><published>2026-06-05T00:00:00-04:00</published><updated>2026-06-05T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/What-Is-a-One-Time-Password-Link</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-06-05-What-Is-a-One-Time-Password-Link/"><![CDATA[<p>A one-time password link is a URL that contains a password or secret. The recipient opens the link, sees the credential, and the link self-destructs. Anyone who tries to use the link afterward gets nothing — the data has been deleted.</p>

<p>It’s the simplest way to share a password without leaving it sitting in an inbox, a chat log, or a shared document forever.</p>

<!-- more -->

<h2 id="how-one-time-password-links-work">How One-Time Password Links Work</h2>

<p>The concept has three parts:</p>

<ol>
  <li><strong>You create the link.</strong> Paste your password into a tool that generates a unique URL. You set how many times the link can be viewed and how long it should stay active.</li>
  <li><strong>You send the link.</strong> Through email, Slack, Teams, text — whatever channel you’d normally use. The password isn’t in the message. Just the link.</li>
  <li><strong>The link self-destructs.</strong> After the recipient views it — or after the time limit expires — the data behind the link is deleted. The URL goes dead permanently.</li>
</ol>

<p>The key difference from sending a password directly: the credential doesn’t persist. An email with a password in it is searchable, forwardable, and backed up indefinitely. An email with a one-time link in it becomes worthless the moment the link expires.</p>

<h2 id="why-use-a-one-time-link-instead-of-sending-the-password-directly">Why Use a One-Time Link Instead of Sending the Password Directly</h2>

<p>Every time you paste a credential into an email or chat message, that credential now exists in multiple places you don’t control — sent folders, recipient inboxes, message server databases, cloud backups, synced devices. One credential, potentially dozens of copies.</p>

<p>A one-time password link changes the equation:</p>

<ul>
  <li><strong>The password lives in one place</strong> — behind the link — until it’s viewed or expires</li>
  <li><strong>You control the lifecycle</strong> — set view limits (1 view, 5 views, whatever you need) and a time window (hours, days, or weeks)</li>
  <li><strong>You get an audit trail</strong> — know when the link was opened, from where, and how many times</li>
  <li><strong>The recipient doesn’t need an account</strong> — they click a link, that’s it</li>
  <li><strong>You can revoke it early</strong> — if you sent the link to the wrong person, kill it before they open it</li>
</ul>

<p>This works equally well for sharing credentials with colleagues, sending temporary passwords to clients, or distributing API keys to contractors. The recipient gets what they need. The credential doesn’t outlive its purpose.</p>

<h2 id="how-to-create-a-one-time-password-link">How to Create a One-Time Password Link</h2>

<p><a href="https://pwpush.com">Password Pusher</a> has been doing this since 2011. Here’s the workflow:</p>

<ol>
  <li>Go to <a href="https://pwpush.com">pwpush.com</a> — no account required</li>
  <li>Paste your password, API key, or any text you need to share</li>
  <li>Set your <strong>view limit</strong> (how many times the link can be opened) and <strong>expiration</strong> (how many days or hours before it’s deleted regardless)</li>
  <li>Optionally add a <strong>passphrase</strong> — the recipient will need both the link and the passphrase to see the content</li>
  <li>Click <strong>“Push it!”</strong> and copy the generated link</li>
  <li>Send the link to your recipient however you want</li>
</ol>

<p>When they open the link, they see the credential. After the view limit or time limit is reached, the data is permanently deleted.</p>

<h2 id="what-about-url-preview-bots">What About URL Preview Bots?</h2>

<p>This is a real problem that most one-time sharing tools ignore. When you send a link through Slack, Microsoft Teams, or iMessage, those platforms automatically fetch the URL to generate a preview. If the tool counts that fetch as a “view,” the password might be consumed before the recipient ever sees it.</p>

<p>Password Pusher handles this with a <strong>one-click retrieval step</strong>. When someone opens a push link, they see a landing page first — they have to click a button to reveal the content. Bots don’t click buttons. The recipient does.</p>

<h2 id="temporary-passwords-and-short-lived-credentials">Temporary Passwords and Short-Lived Credentials</h2>

<p>One-time password links are especially useful for temporary passwords — credentials that only need to exist long enough to get someone logged in.</p>

<p>Common use cases:</p>

<ul>
  <li><strong>New employee onboarding</strong> — send initial login credentials that expire after first use</li>
  <li><strong>Client handoffs</strong> — share staging server access or admin passwords for a project deliverable</li>
  <li><strong>IT support</strong> — distribute temporary passwords for password resets</li>
  <li><strong>Vendor access</strong> — give a contractor credentials for a specific system, knowing the link dies after they’ve used it</li>
</ul>

<p>Set the view limit to 1 and the expiration to 24 hours, and you’ve created a credential that quite literally cannot persist beyond its intended purpose.</p>

<h2 id="beyond-text--files-urls-and-more">Beyond Text — Files, URLs, and More</h2>

<p>Password Pusher isn’t limited to text passwords. You can attach <strong>files</strong> alongside your push — share a credential document, a configuration file, or an SSH key, all behind the same self-destructing link. You can also push <strong>URLs</strong> and <strong>QR codes</strong> with the same expiration controls.</p>

<p>File sharing requires a <a href="https://pwpush.com/pricing">Premium or Pro subscription</a> on the hosted service. If you self-host the <a href="https://github.com/pglombardo/PasswordPusher">open source edition</a>, file sharing is included out of the box.</p>

<h2 id="open-source-and-fourteen-years-in-production">Open Source and Fourteen Years in Production</h2>

<p>Password Pusher has been running since 2011. The security-critical code — AES-256 encryption, data handling, expiry logic, audit logging — is <a href="https://github.com/pglombardo/PasswordPusher">fully open source</a> and auditable on GitHub. Over 100 million secrets shared to date.</p>

<p>The free tier on <a href="https://pwpush.com">pwpush.com</a> handles one-time password links with no account required. <a href="https://pwpush.com/pricing">Pro subscriptions</a> add team collaboration, custom domains, white-label branding, and workspace policies for organizations. Available hosted — with dedicated <a href="https://eu.pwpush.com">EU</a> and <a href="https://us.pwpush.com">US</a> data regions — or <a href="https://pwpush.com/self-hosted-pricing">self-hosted</a> on your own infrastructure.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Guides" /><category term="one-time-link" /><category term="secure-sharing" /><category term="temporary-password" /><summary type="html"><![CDATA[A one-time password link is a URL that lets you share a credential once and then self-destructs. Here's how they work and how to create one in seconds.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/one-time-password-link.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/one-time-password-link.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Password Pusher for MSPs</title><link href="https://docs.pwpush.com/posts/2026-05-17-password-pusher-for-msps/" rel="alternate" type="text/html" title="Password Pusher for MSPs" /><published>2026-05-17T00:00:00-04:00</published><updated>2026-05-17T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/password-pusher-for-msps</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-05-17-password-pusher-for-msps/"><![CDATA[<h1 id="password-pusher-for-msps">Password Pusher for MSPs</h1>

<p>For a while now, we’ve been noticing something in our traffic data: a lot of managed service providers already use Password Pusher.</p>

<p>Referral traffic from ConnectWise, Kaseya, IT Glue, Atlassian — MSP tools are consistently some of our top traffic sources. It makes sense. If you’re an MSP handing off WiFi passwords, admin credentials, or license keys to clients every day, you need a way to do that without leaving those credentials sitting permanently in a ticket history or email thread.</p>

<p>What we hadn’t done is acknowledge that directly on the site. Until now.</p>

<h2 id="whats-new">What’s New</h2>

<p>We’ve launched a dedicated <a href="https://eu.pwpush.com/msp">MSP page</a> that speaks directly to how managed service providers use Password Pusher — the workflow, the compliance angle, and the specific features that matter most for credential delivery at scale.</p>

<p>We’ve also built out a <a href="/https://eu.pwpush.com/partners">Partner Program</a> for MSPs and IT services companies who want to resell Password Pusher Pro self-hosted licenses to their clients.</p>

<h2 id="the-partner-program">The Partner Program</h2>

<p>The mechanics are straightforward:</p>

<ul>
  <li><strong>Volume discounts</strong> from 30% to 50% off self-hosted Pro licenses, based on your lifetime license count. Your discount tier never goes down.</li>
  <li><strong>Free NFR license</strong> — one free Advanced-tier license for your own internal use, granted automatically when you’re accepted as a partner.</li>
  <li><strong>Automatic discount application</strong> — no special codes or manual processes. Your discount is applied at checkout based on your tier.</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Licenses Sold</th>
      <th>Your Discount</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0–9</td>
      <td>30%</td>
    </tr>
    <tr>
      <td>10+</td>
      <td>35%</td>
    </tr>
    <tr>
      <td>25+</td>
      <td>40%</td>
    </tr>
    <tr>
      <td>50+</td>
      <td>45%</td>
    </tr>
    <tr>
      <td>100+</td>
      <td>50%</td>
    </tr>
  </tbody>
</table>

<p>The idea is simple: use Password Pusher internally, know it works, and offer it to your clients with margins that make sense for your business.</p>

<h2 id="why-this-matters-for-msps">Why This Matters for MSPs</h2>

<p>The credential sharing problem in the MSP world is well understood. Passwords end up in PSA ticket notes, email threads, Slack messages — places where they persist indefinitely and are searchable by anyone with access.</p>

<p>Beyond the obvious security risk, there’s a growing compliance angle. Cyber insurance underwriters are increasingly asking MSPs about per-client credential isolation and documented delivery processes. Having an audit trail that shows a credential was delivered via an expiring link, viewed once, and automatically destroyed is exactly the kind of evidence that satisfies those questions.</p>

<p>Password Pusher handles this with self-destructing links, full lifecycle audit logging, optional passphrase protection, and one-click retrieval to prevent URL scanners from consuming views. For MSPs doing volume, <a href="/features">Auto-Dispatch</a> emails the secure link directly to the client — no copy-paste required.</p>

<p>And for MSPs with strict compliance requirements, the <a href="https://eu.pwpush.com/self-hosted-pricing">self-hosted option</a> puts everything inside your own infrastructure. Your SOC 2, your controls, your data.</p>

<h2 id="getting-started">Getting Started</h2>

<p>If you’re an MSP already using Password Pusher, the <a href="https://eu.pwpush.com/partners">Partner Program</a> is worth a look — especially if you’re deploying self-hosted instances for clients.</p>

<p>If you’re new to Password Pusher, the free tier on <a href="https://pwpush.com">pwpush.com</a> is the fastest way to try it. No credit card, no signup required for basic pushes.</p>

<p>Either way, the new <a href="https://eu.pwpush.com/msp">MSP page</a> has the full picture of how it all fits together for managed service providers.</p>

<hr />

<p><em>Peter Giacomo Lombardo — <a href="https://apnotic.com">Apnotic, LLC</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Features" /><category term="msp" /><category term="partner-program" /><category term="secure-sharing" /><summary type="html"><![CDATA[A new MSP-focused landing page and partner program for managed service providers who use Password Pusher for client credential delivery.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/password-pusher-for-msps.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/password-pusher-for-msps.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Looking for Bitwarden Send Alternatives? Here’s What to Know in 2026</title><link href="https://docs.pwpush.com/posts/2026-05-17-Looking-For-Bitwarden-Send-Alternatives/" rel="alternate" type="text/html" title="Looking for Bitwarden Send Alternatives? Here’s What to Know in 2026" /><published>2026-05-16T00:00:00-04:00</published><updated>2026-05-16T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Looking-For-Bitwarden-Send-Alternatives</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-05-17-Looking-For-Bitwarden-Send-Alternatives/"><![CDATA[<p>In January 2026, Bitwarden nearly doubled the price of their Premium plan — from $10/year to $19.80/year. A 98% increase.</p>

<p>The communication around it wasn’t great either. <a href="https://www.fastcompany.com/91483458/bitwarden-price-increase">Fast Company covered the backlash</a>, specifically calling out the “$1.65/month billed annually” framing when there’s no monthly billing option. That’s the kind of pricing trick that erodes trust, especially from a company that built its reputation on transparency.</p>

<p>Since then, I’ve watched a steady stream of people looking for Bitwarden Send alternatives. Which makes sense — if you were using Bitwarden primarily for Send (their secure sharing feature), a 98% price increase on what was already a secondary feature is a reasonable reason to look around.</p>

<p>I built <a href="https://pwpush.com">Password Pusher</a>, so I’m obviously not a neutral party here. But I’ve been building secure sharing tools since 2011 and I think I can offer some useful perspective on what to actually evaluate — regardless of where you end up.</p>

<!-- more -->

<h2 id="the-price-hike-isnt-really-the-problem">The Price Hike Isn’t Really the Problem</h2>

<p>Look, $20/year is still cheap software. If Bitwarden Send did everything you needed, the price increase alone probably wouldn’t be worth switching over.</p>

<p>The real question the price hike forces is: <em>should you be paying for an entire password manager just to share secrets?</em></p>

<p>Bitwarden is a solid password manager. But Send is a feature inside that password manager — not a standalone product. Its roadmap, its priorities, its development resources are all driven by the password management use case. Sharing is secondary.</p>

<p>That’s not a knock on Bitwarden. It’s just the reality of how product development works. When you need a screwdriver, buying a whole toolbox works — but you’re paying for a lot of tools you don’t need.</p>

<p>And the price hike is part of a broader pattern that has the community paying attention. New CEO with private equity experience. “Always free” quietly removed from the website. Company values like “Transparency” and “Inclusion” scrubbed. People in the Bitwarden subreddit are drawing direct comparisons to the LastPass trajectory, and I can’t say those concerns are unfounded.</p>

<h2 id="what-actually-matters-in-a-secure-sharing-tool">What Actually Matters in a Secure Sharing Tool</h2>

<p>If you’re evaluating alternatives, here’s what I’d focus on:</p>

<p><strong>Does it require an account to send?</strong> Most people sharing a secret need to do it right now. If the tool requires signup and login before you can share anything, that’s friction at exactly the wrong moment. Bitwarden Send requires a Bitwarden account. Some alternatives don’t.</p>

<p><strong>What’s the expiry model?</strong> You want granular control over both view limits and time limits. Bitwarden Send caps at 31 days maximum. Some tools go longer. For most use cases, the more control you have over the lifecycle of a shared secret, the better.</p>

<p><strong>Is there an audit trail?</strong> If you’re sharing credentials in a business context, you need to know: was this link opened? When? How many times? Bitwarden restricts audit logging to their Teams and Enterprise plans. For a tool focused on secure distribution, per-item audit logging should be the baseline — not a premium upsell.</p>

<p><strong>Can it be self-hosted?</strong> If you’re in a regulated industry or just prefer to keep secrets on your own infrastructure, self-hosting matters. Both Bitwarden and some alternatives offer this — but the depth of self-hosted features varies widely.</p>

<p><strong>Does it handle URL preview bots?</strong> This one gets overlooked. When you send a link via Slack, Teams, or iMessage, URL preview bots fetch that link before the recipient ever sees it. If the tool counts that bot fetch as a “view,” your recipient might find the secret already expired. A good sharing tool has a retrieval step or other mechanism to prevent this.</p>

<h2 id="where-password-pusher-fits">Where Password Pusher Fits</h2>

<p>Password Pusher is purpose-built for exactly this use case — secure, temporary sharing of sensitive information. It’s been in production since 2011, it’s <a href="https://github.com/pglombardo/PasswordPusher">fully open source</a>, and it’s handled over 100 million secrets to date.</p>

<p>No account required to send. Per-push audit logging on every tier. View limits, time limits, passphrase protection, and a one-click retrieval step that prevents bots from burning your links. Self-hosted or SaaS with dedicated <a href="https://eu.pwpush.com">EU</a> and <a href="https://us.pwpush.com">US</a> data regions.</p>

<p>I wrote a detailed comparison page that puts Password Pusher and Bitwarden Send side by side — feature for feature — including the areas where Bitwarden is genuinely stronger (like their end-to-end encryption model). I’d encourage you to take a look:</p>

<p><strong><a href="https://pwpush.com/compare/bitwarden-send">Password Pusher vs. Bitwarden Send — Full Comparison →</a></strong></p>

<h2 id="one-more-thing">One More Thing</h2>

<p>Price hikes have a way of forcing useful conversations. If the Bitwarden increase made you actually evaluate what you need from a sharing tool, that’s a good outcome regardless of what you choose.</p>

<p>My hope is that this post helps a few people make a more informed decision. There are several solid options out there. Password Pusher is one of them, and it’s the one I’ve spent the last 14+ years building to be the best at this specific job.</p>

<hr />

<p><em>Peter Giacomo Lombardo</em>
<em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>pglombardo</name></author><category term="Comparisons" /><category term="bitwarden" /><category term="alternatives" /><category term="secure-sharing" /><summary type="html"><![CDATA[Bitwarden doubled their prices in January 2026. If you're evaluating Bitwarden Send alternatives, here's what actually matters when choosing a secure sharing tool.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/bitwarden-send-alternative.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/bitwarden-send-alternative.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A Text Input, Some Encryption, and a Submit Button</title><link href="https://docs.pwpush.com/posts/2026-05-02-A-Text-Input-Some-Encryption-and-a-Submit-Button/" rel="alternate" type="text/html" title="A Text Input, Some Encryption, and a Submit Button" /><published>2026-05-02T00:00:00-04:00</published><updated>2026-05-02T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/A-Text-Input-Some-Encryption-and-a-Submit-Button</id><content type="html" xml:base="https://docs.pwpush.com/posts/2026-05-02-A-Text-Input-Some-Encryption-and-a-Submit-Button/"><![CDATA[<p>In 2011, I built something that took about a weekend.</p>

<p>A text input. Some encryption. A submit button. That was it. I pushed it to production, open-sourced the code, and went back to my day job. I didn’t think about it much after that.</p>

<p>But someone used it. And then someone else did. And then a few more.</p>

<p><img src="/assets/images/posts/2026/pwpush-2017.png" alt="The original Password Pusher UI" /></p>

<p>“Go Ahead. Email Another Password.” That was the tagline. That was the whole pitch. The product was barely a product — it was a reaction to a problem that annoyed me. People were emailing passwords in plain text. So I built the smallest thing that could fix that.</p>

<p>Then a strange thing started happening.</p>

<p><img src="/assets/images/posts/2026/pwpush-analytics-2012.png" alt="Password Pusher traffic from 2012 to 2017" /></p>

<p>See that flat line from 2012 to 2014? That’s three years of almost nothing. Then a slow curve upward. Not fast. Not in any way that would make a headline. Just — every month, a little more. More Docker pulls. More people I’d never heard of, at companies I’d never heard of, quietly using this thing I built on a weekend.</p>

<p>Year after year. I’d add a feature. Fix a bug. Add another feature. The backlog grew. Feature requests started waiting six months. Then a year. Then longer.</p>

<p>And at some point — I don’t remember the exact moment — but sometime in late 2023-2024 I had to make a decision.</p>

<p>Option one: keep the pace. Hobby project. A few features a year. Nothing wrong with that.</p>

<p>Option two: find a way to make this thing self-sufficient. Work on it properly. But on my terms.</p>

<p>I went with option two.</p>

<p>Now here’s the part where most founders say they raised a round. Pitched VCs. Built a deck. Got a term sheet.</p>

<p>I didn’t do any of that.</p>

<p>Instead, I built a feature pipeline. Premium features for subscribers, with those features rolling into the open-source version over time. Customers fund development. Development benefits everyone. No investors, no debt, no one to answer to except the people using the product.</p>

<p>That became <a href="https://apnotic.com">Apnotic</a>.</p>

<p>And today — fourteen years after that weekend — we have 345K monthly active users. 50M+ Docker downloads. Over 100 million secrets shared. 400 paying customers. Healthy recurring revenue. A team of two, an advisor, and fourteen years of work that I genuinely enjoy showing up to every day.</p>

<p>All from a text input. Some encryption. And a submit button.</p>]]></content><author><name>Peter Giacomo Lombardo</name></author><category term="Company" /><category term="apnotic" /><category term="open-source" /><category term="bootstrapped" /><category term="password-pusher" /><category term="apnotic" /><summary type="html"><![CDATA[In 2011, I built something that took about a weekend.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/pwpush-2017.png" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/pwpush-2017.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Self-Hosted Pricing Philosophy</title><link href="https://docs.pwpush.com/posts/self-hosted-pricing-philosophy/" rel="alternate" type="text/html" title="Self-Hosted Pricing Philosophy" /><published>2026-02-24T00:00:00-05:00</published><updated>2026-02-24T00:00:00-05:00</updated><id>https://docs.pwpush.com/posts/Pricing-Philosopy</id><content type="html" xml:base="https://docs.pwpush.com/posts/self-hosted-pricing-philosophy/"><![CDATA[<p>Security tools like Password Pusher ought to be available to your entire organization—always. They educate your team, build better security habits, and protect sensitive data. When security is the default, the whole organization benefits.</p>

<p>We know you have choices. There are alternatives and competitors.</p>

<p>Our main criticism of many of them isn’t features—it’s price. Some charge up to $30/user/month. Others charge per push and charge for API access.  How can security become the default when adoption is that complicated and expensive? That kind of pricing shuts out smaller teams and orgs that need it most.</p>

<p>Apnotic is a small, dedicated team. We have open source roots, no venture funding, no debt, and we’re profitable. No outside investors or pressures—just a long history of building Password Pusher (since 2011) and a focus on making a sincere, honest, and secure product.</p>

<p>We believe these tools should be priced so that entire organizations can have access—not just the few who use them every day.  That’s the position we’re coming from.</p>

<p><img src="/assets/images/posts/2026/self-hosted-pricing-philosophy.png" alt="" class="align-center" /></p>

<h2 id="self-hosted-pricing">Self-Hosted Pricing</h2>

<p>We priced Self-Hosted with one goal: let you roll the tool out to your entire organization without per-user sticker shock with all the features you need out of the box.</p>

<p>We don’t charge for every user. Each plan includes a base number of seats: <strong>Starter</strong> (5), <strong>Advanced</strong> (25), and <strong>Enterprise</strong> (50). Need more than the base? We charge for extra seats—but not at competitor rates. Additional seats start at $1/user/month and go down on larger plans.</p>

<p>What’s more, we never limit pushes or requests, and API access is always included.</p>

<p>With Self-Hosted Password Pusher Pro, your data is yours. We even declare this in the <a href="https://eu.pwpush.com/documents/eula-self-hosted-pro.pdf">EULA</a>:</p>

<blockquote>
  <p><strong>To be absolutely clear</strong>: Apnotic has no ability to access Your Data, and we never will. Your sensitive information, passwords, user content, and all other data stored within your self-hosted deployment remain completely private and inaccessible to Apnotic. We cannot see it, we do not want to see it, and we have designed the Software specifically to ensure that your data stays within your control at all times.</p>
</blockquote>

<p>We hope you see the same value we do in this approach. As always, we’ll keep listening to the community and evolving. Password Pusher is what it is today because of the feedback, suggestions, and ideas you’ve shared over the years.</p>

<p>See Self-Hosted pricing at the links below. Where you purchase determines your customer data residency:</p>

<ul>
  <li><a href="https://us.pwpush.com/self-hosted-pricing">US — us.pwpush.com</a></li>
  <li><a href="https://eu.pwpush.com/self-hosted-pricing">EU — eu.pwpush.com</a> (GDPR compliant)</li>
</ul>

<div class="notice notice--info">
  <p><strong>Questions or feedback?</strong> Email me directly anytime: <a href="mailto:pglombardo@apnotic.com">pglombardo@apnotic.com</a>.</p>

  <p><strong>Need support?</strong> <a href="mailto:support@pwpush.com">support@pwpush.com</a></p>
</div>

<hr />

<p><strong>Peter Giacomo Lombardo</strong></p>

<p><em>Founder &amp; Principal, <a href="https://apnotic.com">Apnotic</a> · Creators of <a href="https://pwpush.com">Password Pusher</a></em></p>]]></content><author><name>Peter Giacomo Lombardo</name></author><category term="Company" /><category term="General" /><summary type="html"><![CDATA[How we price Self-Hosted Password Pusher and why.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2026/self-hosted-pricing-philosophy.png" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2026/self-hosted-pricing-philosophy.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A Tale of One IP and Password Pusher’s Balancing Act</title><link href="https://docs.pwpush.com/posts/a-tale-of-one-ip-and-balancing-act/" rel="alternate" type="text/html" title="A Tale of One IP and Password Pusher’s Balancing Act" /><published>2025-09-07T00:00:00-04:00</published><updated>2025-09-07T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Tale-of-One-IP</id><content type="html" xml:base="https://docs.pwpush.com/posts/a-tale-of-one-ip-and-balancing-act/"><![CDATA[<p><img src="/assets/images/posts/2025/tale-of-one-ip-2.jpg" alt="" class="align-center" /></p>

<h1 id="a-single-german-ip">A Single German IP</h1>

<p>For over a year, <em>a single IP from Germany has been generating 8,000–10,000 anonymous pushes daily</em> on <a href="https://pwpush.com">pwpush.com</a>, far exceeding the activity of any other single IP. Initially, I wondered if this was spam or abuse, but it could also have been a legitimate automated use case—who’s to say? With no complaints or harm reported, I let it slide.</p>

<p>Then, a few weeks ago, <strong>this IP ramped up to 90,000–100,000 pushes per day</strong>, dwarfing all other activity.</p>

<p>More recently, it spiked to a staggering <strong>~200,000 pushes daily</strong>, pushing our system to its limits. This surge began to impact the experience for other users, so I had to take action.</p>

<p>Here’s the story, along with some context about how Password Pusher handles push expiration and what we’ve done to keep the service running smoothly.</p>

<h1 id="how-push-expiration-works">How Push Expiration Works</h1>

<p>In Password Pusher, pushes (and their associated requests) are designed to expire automatically based on either a view limit or a duration limit. Once a limit is reached, the secret URL self-destructs, ensuring sensitive data doesn’t linger.</p>

<ul>
  <li><strong>View-Based Expiration</strong>: This is straightforward. When a push reaches its final allowed view, the application displays the payload and immediately deletes the push.</li>
  <li><strong>Duration-Based Expiration</strong>: This requires periodic scans. Background jobs run at intervals to identify pushes that have exceeded their duration and trigger their deletion.</li>
</ul>

<p>To ensure no expired pushes slip through, we re-verify expiration limits whenever a viewer requests a push. If the limits are exceeded, the push is deleted on the spot, and the viewer sees an expiration message. This approach guarantees that expiration rules are always enforced, even if a background job hasn’t yet processed a push.</p>

<h1 id="the-impact-of-the-anonymous-ip">The Impact of the Anonymous IP</h1>

<p>As the IP’s activity surged to ~200,000 pushes per day, our background expiration jobs took longer to complete. This increased system load and began affecting other users’ experience. While I’d like to believe there was a valid use case behind this activity, the strain it placed on Password Pusher’s infrastructure was undeniable.</p>

<p>Of course I can scale out more workers and increase resources but this all has a financial cost.  For the single anonymous source with unknown motives, this wasn’t an option.</p>

<p>So to address this, I made the tough decision to block the IP—a step I’ve rarely taken. I also optimized the performance of the background expiration job and tightened API throttling to better manage high-volume usage. These changes have helped stabilize the system and ensure a smoother experience for all users.</p>

<h1 id="looking-ahead">Looking Ahead</h1>

<p>Password Pusher is an open-source project at its core, built by the team at <a href="https://apnotic.com">Apnotic</a> to serve the community.</p>

<p>We’re committed to providing anonymous access and supporting diverse use cases, but we also have to prioritize the availability and performance of the service for everyone.</p>

<h1 id="a-message-to-the-owner-of-that-ip">A Message to the Owner of that IP</h1>

<p>If you’re the user behind this IP and have a legitimate use case, <a href="https://docs.pwpush.com/docs/support/">please reach out</a>! I’d be happy to discuss how we can support your needs without compromising the experience for others.</p>

<p>You can contact me directly, and we’ll work to find a solution.</p>

<p>Alternatively, if your use case involves high-volume pushes, you might consider self-hosting your own instance of Password Pusher to better suit your needs. Here’s how you can get started:</p>

<h2 id="run-your-own-ephemeral-instance">Run Your Own Ephemeral Instance</h2>

<p>Set up a DNS record to point to your server (e.g., pwpush.example.com).</p>

<p>Run the following command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run -d -p "80:80" -p "443:443" --env TLS_DOMAIN=pwpush.example.com pglombardo/pwpush:latest
</code></pre></div></div>

<p>Browse to <code class="language-plaintext highlighter-rouge">https://pwpush.example.com</code>.</p>

<h2 id="or-alternatively">Or Alternatively</h2>

<p>Use one of our <a href="https://docs.pwpush.com/docs/installation/#docker-compose">production-ready Docker Compose files</a> with persistent databases for a more robust setup.</p>

<hr />

<p>Thank you to our amazing community for your continued support. Password Pusher thrives because of you.</p>]]></content><author><name>Peter Giacomo Lombardo</name></author><category term="Community Updates" /><category term="community" /><summary type="html"><![CDATA[For over a year, a single IP from Germany consistently generated 8,000–10,000 anonymous pushes daily on Password Pusher, far surpassing typical activity. Recently, this surged to 100,000 pushes per day, and now it’s reached an astonishing 200,000 daily pushes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2025/tale-of-one-ip-2.jpg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2025/tale-of-one-ip-2.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Introducing the Feature Pipeline</title><link href="https://docs.pwpush.com/posts/feature-pipeline/" rel="alternate" type="text/html" title="Introducing the Feature Pipeline" /><published>2024-08-15T00:00:00-04:00</published><updated>2024-08-15T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Feature-Pipeline</id><content type="html" xml:base="https://docs.pwpush.com/posts/feature-pipeline/"><![CDATA[<p><img src="/assets/images/posts/2025/pwpush-new-feature-pipeline.jpeg" alt="" class="align-center" /></p>

<h1 id="background">Background</h1>

<p>Up to this point, I’ve been happily working on Password Pusher since it’s inception in 2011 in my free time and it’s been greatly rewarding.</p>

<p>But over the last few years, popularity has grown to such a point that, because of the large backlog of work to do, <strong>feature
requests have had to wait sometimes a year or more</strong> before I can even get the point of implementing them.</p>

<p>Some of these requests are:</p>

<ul>
  <li>Extended Branding: More logos &amp; custom text on more pages</li>
  <li>SSO &amp; LDAP</li>
  <li>More Password Generator Options</li>
  <li>Bulk push operations</li>
  <li>Automatic Emailing of Pushes</li>
  <li>Large (&gt;4GB) file uploads</li>
  <li>and a lot more…</li>
</ul>

<p>These would be great additions to the project but have been delayed over and over again just because of the sheer number of requests and limited time.</p>

<h1 id="which-direction-forward">Which Direction Forward?</h1>

<p>So what to do?</p>

<p>My options are that I can either:</p>

<ul>
  <li><strong>Option 1</strong>: maintain the current pace with recreational coding in my free time, adding a few big features each year</li>
</ul>

<p>or</p>

<ul>
  <li><strong>Option 2</strong>: find a way to to accelerate this project, make it self-sufficient and start to add the features users are asking for now</li>
</ul>

<p>…we are going with the second option.</p>

<h1 id="feature-pipeline">Feature Pipeline</h1>

<p>The feature pipeline is <strong>a set of premium and pro features over and beyond the open-source code base that is available through subscriptions</strong>.</p>

<p>As development progresses, <strong>many of these premium features will periodically be moved to the open-source code base</strong>.</p>

<p>Organizations that subscribe get immediate access to these premium features and support open-source development.</p>

<p>Going forward, some newly developed features may be premium at first only, others will go straight to open-source.</p>

<p>This model creates a “pipeline of features” that progress from premium to open-source.  It will allow me to work far more on the project and really accelerate development.</p>

<h2 id="self-hosted-whats-changed">Self-Hosted: What’s Changed?</h2>

<p>Absolutely nothing has changed but do <strong>expect more features faster</strong> in the open-source version coming soon.</p>

<p class="notice notice--info"><strong>Note</strong>: A self-hosted version of the Premium/Pro features (Self-Hosted Pro) is now available. See <a href="/docs/pro-self-hosted/">Pro Self-Hosted</a> and <a href="https://us.pwpush.com/self-hosted-pricing">Self-Hosted Pricing</a>.</p>

<h2 id="pwpushcom-whats-changed">pwpush.com: What’s Changed?</h2>

<p><strong>You get a ton of new features immediately (without a subscription).</strong></p>

<p>And for those who want to subscribe, there are even more features aimed at professionals and teams.  Read about them <a href="/posts/pipeline-new-features/">here</a>.</p>

<p>But there is one feature that is now subscription limited that wasn’t previously: <em>file uploads</em>.   Read on for more.</p>

<h3 id="pwpushcom-file-uploads">pwpush.com: File Uploads</h3>

<p>For a long time, on pwpush.com, anyone could upload files and attach them to pushes.  Essentially anonymous file uploads.</p>

<p>It started out well but lately there has been some hints of abuse and after thinking it through, I’ve realized that anonymous file uploads pose a real risk to myself and to the project.</p>

<p>I really tried to keep these free but unfortunately, the risk is too great and hence are now only available to subscribers.</p>

<p><strong>This only affects users of pwpush.com</strong>.  Those self-hosting the application are unaffected.</p>

<p class="notice notice--info"><strong>Note</strong>: To utilize file uploads, you can either <a href="https://pwpush.com/pricing">subscribe</a> or self-host Password Pusher which doesn’t have any limitations on file uploads.</p>

<p>My apologies on this one. I really tried to keep file uploads free but unfortunately it’s just not possible.</p>

<h1 id="editions">Editions</h1>

<p>There are now three editions of Password Pusher:</p>

<ul>
  <li><strong>OSS</strong>: The open source version as always available in the <a href="https://github.com/pglombardo/PasswordPusher">Github repository</a></li>
  <li><strong>Premium</strong>: A Premium edition on pwpush.com with file uploads, a personal policy &amp; extensive branding</li>
  <li><strong>Pro</strong>: A Pro edition for teams collaboration, custom domains &amp; team policy enforcement</li>
</ul>

<p>Where are these editions available?  Here’s a table to illustrate:</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">Edition</th>
      <th style="text-align: center">pwpush.com?</th>
      <th style="text-align: center">Can Self-Host?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>OSS</strong></td>
      <td style="text-align: center">✅️️️</td>
      <td style="text-align: center">✅</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Premium</strong></td>
      <td style="text-align: center">✅️</td>
      <td style="text-align: center">✖️</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>Pro</strong></td>
      <td style="text-align: center">✅️</td>
      <td style="text-align: center">✅</td>
    </tr>
  </tbody>
</table>

<p>See the subscription pricing <a href="https://pwpush.com/pricing">here</a>.</p>

<p class="notice notice--info"><strong>Note</strong>: The Pro self-hosted option (Self-Hosted Pro) is now available. See <a href="/docs/pro-self-hosted/">Pro Self-Hosted</a> and <a href="https://us.pwpush.com/self-hosted-pricing">Self-Hosted Pricing</a>.</p>

<h2 id="how-to-subscribe">How to Subscribe</h2>

<p>Thank you for even considering to support the project.  Pricing for the new subscriptions is <a href="https://pwpush.com/pricing">here</a>.</p>

<h1 id="summary">Summary</h1>

<p>My hope is that the introduction of subscriptions and this new feature pipeline will allow me to build out Password Pusher to better secure you and your organizations and to to hopefully make your professional lives a little bit easier.</p>

<p>And ultimately, to have the open-source version as the eventual &amp; final benefactor of new features.</p>

<h1 id="wrap-up">Wrap Up</h1>

<p>Thanks to the Password Pusher community for the trust, support &amp; feedback over the years.</p>

<p>As always, if you have any questions, problems or feedback, feel free to contact me anytime: <code class="language-plaintext highlighter-rouge">pglombardo</code> at the <code class="language-plaintext highlighter-rouge">pwpush.com</code> domain or see the <a href="/docs/support/">Support page</a> for other methods.</p>

<h1 id="see-also">See Also</h1>

<ul>
  <li><a href="/posts/pipeline-new-features/">Pipeline New Features</a></li>
  <li><a href="https://pwpush.com/pricing">Subscription Pricing</a></li>
</ul>]]></content><author><name>Peter Giacomo Lombardo</name></author><category term="Company" /><category term="General" /><summary type="html"><![CDATA[...a set of premium and pro features over and beyond the open-source code base that are periodically migrated to OSS.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2025/pwpush-new-feature-pipeline.jpeg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2025/pwpush-new-feature-pipeline.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Pipeline: New Features</title><link href="https://docs.pwpush.com/posts/pipeline-new-features/" rel="alternate" type="text/html" title="Pipeline: New Features" /><published>2024-08-04T00:00:00-04:00</published><updated>2024-08-04T00:00:00-04:00</updated><id>https://docs.pwpush.com/posts/Pipeline-New-Features</id><content type="html" xml:base="https://docs.pwpush.com/posts/pipeline-new-features/"><![CDATA[<p><img src="/assets/images/posts/2025/pipeline-new-features.jpeg" alt="" class="align-center" /></p>

<p>This page explains and illustrates the new features introduced along with subscriptions and the new Feature Pipeline.</p>

<p class="notice notice--info"><strong>Note</strong>: These features are not yet available in the OSS edition.  Read about the <a href="/posts/feature-pipeline/">Feature Pipeline</a> for more info.</p>

<h1 id="for-all-users">For All Users</h1>

<h2 id="two-factor-authentication">Two Factor Authentication</h2>

<p>User accounts now include the option of enabling two-factor authentication.  Make sure to download your backup codes.</p>

<p><img src="/assets/images/screenshots/pwpush-2fa.png" alt="" class="shadow" /></p>

<h2 id="google--microsoft-single-sign-on">Google &amp; Microsoft Single Sign-On</h2>

<p>Login with your Google and/or Microsoft account</p>

<p><img src="/assets/images/screenshots/pwpush-sso-login.png" alt="" class="shadow" /></p>

<h2 id="personal-policies">Personal Policies</h2>

<p>Set Push defaults, preferences, limits and even hide options entirely.</p>

<p><img src="/assets/images/screenshots/pwpush-personal-policy.png" alt="" class="shadow" /></p>

<h2 id="multiple-api-tokens">Multiple API Tokens</h2>

<p>Create a Unique token for each tool that you connect with.</p>

<p><img src="/assets/images/screenshots/pwpush-api-tokens-1.png" alt="" class="shadow" /></p>

<p>You can even revoke tokens now.</p>

<p><img src="/assets/images/screenshots/pwpush-api-tokens-2.png" alt="" class="shadow" /></p>

<h2 id="multiple-workspaces">Multiple Workspaces</h2>

<p>One for you, one for your day-time job and others for whatever your needs are.</p>

<p>Easy switch between workspaces without having to change your log in.</p>

<p><img src="/assets/images/screenshots/pwpush-multiple-accounts.png" alt="" class="shadow" /></p>

<h2 id="set-your-timezone-preferred-language-and-more">Set your timezone, preferred language and more.</h2>

<p>Finally - show dates/times in your local timezone.</p>

<p><img src="/assets/images/screenshots/pwpush-edit-profile.png" alt="" class="shadow" /></p>

<h1 id="premium">Premium</h1>

<p>Premium &amp; Pro subscribers get personalized branding and can attach files to pushes.</p>

<h2 id="file-uploads">File Uploads</h2>

<p>Add files to text pushes:</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-file-uploads.png" alt="" /></p>

<p>Or push only files:</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-file-pushes.png" alt="" /></p>

<p>Users receive branded pushes with files:</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-file-push-delivery.png" alt="" /></p>

<h2 id="logo-branding">Logo Branding</h2>

<p>Add a logo to your pushes.</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-brand-logo.png" alt="" class="shadow" /></p>

<h2 id="1-click-retrieval-step-branding">1-Click Retrieval Step Branding</h2>

<p>The 1-click retrieval step page can be customized to <strong>increase end-user confidence</strong> with a logo or custom text.  You can even <strong>change the text of the “Click Here to Proceed” link</strong> if you wish.</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-1-click.png" alt="" class="shadow" /></p>

<h2 id="passphrase-page-branding">Passphrase Page Branding</h2>

<p>The passphrase page can be branded with custom text, links and a logo.</p>

<p><img src="/assets/images/screenshots/premium-pro/pro-push-passphrase.png" alt="" class="shadow" /></p>

<h2 id="delivery-page-branding">Delivery Page Branding</h2>

<p>Customize the push delivery page according to your organization’s needs.</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-delivery-page.png" alt="" class="shadow" /></p>

<h2 id="expired-page-branding">Expired Page Branding</h2>

<p><img src="/assets/images/screenshots/premium-pro/pro-push-expired.png" alt="" class="shadow" /></p>

<h1 id="pro">Pro</h1>

<p>Pro subscribers get everything above plus…</p>

<h2 id="custom-domain">Custom Domain</h2>

<p>Use your own custom domain on Pushes.</p>

<p><img src="/assets/images/screenshots/premium-pro/pro-custom-domain-url.png" alt="" class="shadow" /></p>

<p><img src="/assets/images/screenshots/premium-pro/pro-custom-domain-edit.png" alt="" class="shadow" /></p>

<h2 id="invite-the-team">Invite the Team</h2>

<p>Invite colleagues to collaborate and manage pushes</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-teams.png" alt="" class="shadow" /></p>

<h2 id="team-roles">Team Roles</h2>

<p>Decide who is admin and who is a member.  Authorize others to set policy and to add/delete users.</p>

<p><img src="/assets/images/screenshots/premium-pro/pro-user-roles.png" alt="" class="shadow" /></p>

<h2 id="team-collaboration">Team Collaboration</h2>

<p>View and manage all pushes created by your team</p>

<p><img src="/assets/images/screenshots/premium-pro/pwpush-shared-dashboard.gif" alt="" class="shadow" /></p>

<h2 id="team-policies">Team Policies</h2>

<p>Enforce security policies on your team; hide or force options, set defaults</p>

<p><img src="/assets/images/screenshots/premium-pro/premium-full-policy.png" alt="" class="shadow" /></p>

<h1 id="summary">Summary</h1>

<p>I hope you find the new features useful.  As always, if you have any issues, questions or feedback, feel free to <a href="/docs/support/">contact me anytime</a>!</p>

<p class="notice--info">🤔 Still need something for you or your organization that you don’t see here?  <a href="/docs/support/">Let me know</a>!</p>

<h1 id="see-also">See Also</h1>

<ul>
  <li><a href="https://pwpush.com/pricing">Subscription Pricing</a></li>
  <li><a href="https://pwpush.com/features">Features Matrix</a></li>
  <li><a href="/posts/feature-pipeline/">Introducing the Feature Pipeline</a> - Announcement Post</li>
</ul>]]></content><author><name>Peter Giacomo Lombardo</name></author><category term="Features" /><category term="General" /><summary type="html"><![CDATA[The new features introduced with the Premium & Pro versions.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://docs.pwpush.com/assets/images/posts/2025/pipeline-new-features.jpeg" /><media:content medium="image" url="https://docs.pwpush.com/assets/images/posts/2025/pipeline-new-features.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>