Plunk website screenshot

Plunk

Plunk is an open-source (AGPL-3.0) email platform for SaaS that unifies transactional email, marketing campaigns, and event-driven automations behind a single REST API. The hosted service runs at api.useplunk.com with Bearer secret / public API keys, and the entire stack can be self-hosted with Docker Compose for full data ownership and no per-email costs.

4 APIs 0 Features
EmailTransactional EmailMarketingAutomationOpen SourceSaaS

APIs

Plunk Send (Transactional) API

Send a single transactional email (HTML or plain-text body) authenticated with a secret API key, with optional sender, reply-to, custom headers, and attachments.

Plunk Track (Events) API

Publish a named contact event that creates or updates the contact and triggers any matching automation. Callable with a public (pk_) key for safe client-side tracking, optionall...

Plunk Contacts API

Create, retrieve, update, count, and delete contacts, and manage subscription state with explicit subscribe / unsubscribe operations. Contacts carry arbitrary metadata used for ...

Plunk Campaigns API

Create, update, delete, and send one-off marketing campaigns to a list of recipients or audience segments, with HTML body and styling controls.

Collections

Plunk API

OPEN

Pricing Plans

Plunk Plans Pricing

3 plans

PLANS

Rate Limits

Plunk Rate Limits

3 limits

RATE LIMITS

FinOps

Plunk Finops

FINOPS

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Plunk API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: Transactional
    type: folder
  items:
  - info:
      name: Send a transactional email
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/send
      body:
        type: json
        data: "{\n  \"to\": \"user@example.com\",\n  \"subject\": \"Welcome to our app\",\n  \"body\": \"<p>Thanks for signing\
          \ up!</p>\"\n}"
    docs: Sends a single transactional email using a secret API key.
- info:
    name: Events
    type: folder
  items:
  - info:
      name: Track an event
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/track
      body:
        type: json
        data: "{\n  \"event\": \"signed-up\",\n  \"email\": \"user@example.com\",\n  \"subscribed\": true,\n  \"data\": {\
          \ \"plan\": \"pro\" }\n}"
    docs: Publishes a contact event that triggers automations. Accepts a public (pk_) or secret key.
- info:
    name: Contacts
    type: folder
  items:
  - info:
      name: List all contacts
      type: http
    http:
      method: GET
      url: https://api.useplunk.com/v1/contacts
    docs: Returns every contact in the project.
  - info:
      name: Get a contact
      type: http
    http:
      method: GET
      url: https://api.useplunk.com/v1/contacts/:id
    docs: Retrieves a single contact by id.
  - info:
      name: Count contacts
      type: http
    http:
      method: GET
      url: https://api.useplunk.com/v1/contacts/count
    docs: Returns the total number of contacts.
  - info:
      name: Create a contact
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/contacts
      body:
        type: json
        data: "{\n  \"email\": \"user@example.com\",\n  \"subscribed\": true,\n  \"data\": { \"firstName\": \"John\", \"plan\"\
          : \"pro\" }\n}"
    docs: Creates a new contact.
  - info:
      name: Update a contact
      type: http
    http:
      method: PUT
      url: https://api.useplunk.com/v1/contacts
      body:
        type: json
        data: "{\n  \"id\": \"contact_123\",\n  \"data\": { \"plan\": \"enterprise\" }\n}"
    docs: Updates an existing contact.
  - info:
      name: Subscribe a contact
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/contacts/subscribe
      body:
        type: json
        data: "{\n  \"id\": \"contact_123\"\n}"
    docs: Sets a contact's subscription state to subscribed.
  - info:
      name: Unsubscribe a contact
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/contacts/unsubscribe
      body:
        type: json
        data: "{\n  \"id\": \"contact_123\"\n}"
    docs: Sets a contact's subscription state to unsubscribed.
  - info:
      name: Delete a contact
      type: http
    http:
      method: DELETE
      url: https://api.useplunk.com/v1/contacts
      body:
        type: json
        data: "{\n  \"id\": \"contact_123\"\n}"
    docs: Permanently deletes a contact by id.
- info:
    name: Campaigns
    type: folder
  items:
  - info:
      name: Create a campaign
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/campaigns
      body:
        type: json
        data: "{\n  \"subject\": \"Product launch\",\n  \"body\": \"<p>We just shipped something new.</p>\",\n  \"recipients\"\
          : [\"user@example.com\"],\n  \"style\": \"PLUNK\"\n}"
    docs: Creates a one-off marketing campaign.
  - info:
      name: Update a campaign
      type: http
    http:
      method: PUT
      url: https://api.useplunk.com/v1/campaigns
      body:
        type: json
        data: "{\n  \"id\": \"campaign_123\",\n  \"subject\": \"Product launch (updated)\"\n}"
    docs: Updates an existing draft campaign.
  - info:
      name: Send a campaign
      type: http
    http:
      method: POST
      url: https://api.useplunk.com/v1/campaigns/send
      body:
        type: json
        data: "{\n  \"id\": \"campaign_123\",\n  \"live\": true\n}"
    docs: Sends a previously created campaign to its recipients.
  - info:
      name: Delete a campaign
      type: http
    http:
      method: DELETE
      url: https://api.useplunk.com/v1/campaigns
      body:
        type: json
        data: "{\n  \"id\": \"campaign_123\"\n}"
    docs: Deletes a campaign by id.