listmonk

listmonk is a free and open-source, self-hosted newsletter and mailing-list manager built in Go with a Vue front end. Every feature in the admin UI is backed by a documented REST API on the self-hosted instance (Basic auth with an API user and token) covering subscribers, lists, campaigns, templates, media, CSV import, transactional messages, and bounces. There is no hosted SaaS - users run their own instance.

7 APIs 0 Features
EmailNewsletterMailing ListOpen SourceSelf-Hosted

APIs

listmonk Subscribers API

Create, query, update, blocklist, and delete subscribers, manage their list memberships individually or in bulk via SQL query expressions, and export subscriber data. Self-hoste...

listmonk Lists API

Create, retrieve, update, and delete mailing lists (single and double opt-in, public and private), with a public unauthenticated endpoint for surfacing subscribable lists on sub...

listmonk Campaigns API

Create, schedule, test, preview, and send email campaigns to one or more lists, change campaign status, publish to a public archive, and pull running stats and view/click/bounce...

listmonk Templates API

Manage campaign and transactional message templates - create, retrieve, update, delete, set a default, and render HTML previews of Go-templated email bodies.

listmonk Media API

Upload, list, retrieve, and delete media files (images and attachments) stored in the local filesystem or an S3-compatible backend for use in campaigns and templates.

listmonk Transactional API

Send arbitrary transactional messages (welcome emails, order confirmations, password resets) to one or more subscribers through a preconfigured transactional template, with cust...

listmonk Import and Bounces API

Bulk import subscribers from a CSV (optionally ZIP-compressed) file and monitor or stop the running import, plus retrieve and delete bounce records used to maintain sender reput...

Collections

Pricing Plans

Listmonk Plans Pricing

1 plans

PLANS

Rate Limits

Listmonk Rate Limits

4 limits

RATE LIMITS

FinOps

Resources

👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: listmonk API
  version: '4.1'
request:
  auth:
    type: basic
    username: '{{apiUser}}'
    password: '{{apiToken}}'
items:
- info:
    name: Subscribers
    type: folder
  items:
  - info:
      name: Query and retrieve subscribers.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/subscribers'
    docs: Query and retrieve subscribers.
  - info:
      name: Create a new subscriber.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/subscribers'
      body:
        type: json
        data: '{}'
    docs: Create a new subscriber.
  - info:
      name: Retrieve a specific subscriber.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/subscribers/{{subscriber_id}}'
    docs: Retrieve a specific subscriber.
  - info:
      name: Update a specific subscriber.
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/subscribers/{{subscriber_id}}'
      body:
        type: json
        data: '{}'
    docs: Update a specific subscriber.
  - info:
      name: Delete a specific subscriber.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/subscribers/{{subscriber_id}}'
    docs: Delete a specific subscriber.
  - info:
      name: Modify subscriber list memberships.
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/subscribers/lists'
      body:
        type: json
        data: '{}'
    docs: Add, remove, or unsubscribe subscribers from lists.
  - info:
      name: Delete subscribers by SQL query.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/subscribers/query/delete'
      body:
        type: json
        data: '{}'
    docs: Delete subscribers matching a SQL expression.
- info:
    name: Lists
    type: folder
  items:
  - info:
      name: Retrieve all lists.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/lists'
    docs: Retrieve all lists.
  - info:
      name: Create a new list.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/lists'
      body:
        type: json
        data: '{}'
    docs: Create a new list.
  - info:
      name: Retrieve a specific list.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/lists/{{list_id}}'
    docs: Retrieve a specific list.
  - info:
      name: Update an existing list.
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/lists/{{list_id}}'
      body:
        type: json
        data: '{}'
    docs: Update an existing list.
  - info:
      name: Delete a specific list.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/lists/{{list_id}}'
    docs: Delete a specific list.
- info:
    name: Campaigns
    type: folder
  items:
  - info:
      name: Retrieve all campaigns.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/campaigns'
    docs: Retrieve all campaigns.
  - info:
      name: Create a new campaign.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/campaigns'
      body:
        type: json
        data: '{}'
    docs: Create a new campaign.
  - info:
      name: Retrieve a specific campaign.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/campaigns/{{campaign_id}}'
    docs: Retrieve a specific campaign.
  - info:
      name: Change status of a campaign.
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/campaigns/{{campaign_id}}/status'
      body:
        type: json
        data: '{}'
    docs: Change the status of a campaign.
  - info:
      name: Test a campaign.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/campaigns/{{campaign_id}}/test'
      body:
        type: json
        data: '{}'
    docs: Send a test of the campaign to arbitrary subscribers.
  - info:
      name: Retrieve campaign analytics.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/campaigns/analytics/{{type}}'
    docs: Retrieve view, click, link, or bounce counts for campaigns.
- info:
    name: Templates
    type: folder
  items:
  - info:
      name: Retrieve all templates.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/templates'
    docs: Retrieve all templates.
  - info:
      name: Create a template.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/templates'
      body:
        type: json
        data: '{}'
    docs: Create a template.
  - info:
      name: Set default template.
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/templates/{{template_id}}/default'
    docs: Set a template as the default.
  - info:
      name: Delete a template.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/templates/{{template_id}}'
    docs: Delete a template.
- info:
    name: Media
    type: folder
  items:
  - info:
      name: Retrieve uploaded media.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/media'
    docs: Retrieve uploaded media files.
  - info:
      name: Upload a media file.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/media'
      body:
        type: multipart-form
        data: []
    docs: Upload a media file.
  - info:
      name: Delete a media file.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/media/{{media_id}}'
    docs: Delete an uploaded media file.
- info:
    name: Transactional
    type: folder
  items:
  - info:
      name: Send a transactional message.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/tx'
      body:
        type: json
        data: '{}'
    docs: Send a transactional message to one or more subscribers.
- info:
    name: Import
    type: folder
  items:
  - info:
      name: Import subscribers from CSV.
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/import/subscribers'
      body:
        type: multipart-form
        data: []
    docs: Upload a CSV (optionally ZIP-compressed) file to import subscribers.
  - info:
      name: Retrieve import status.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/import/subscribers'
    docs: Retrieve the status of an ongoing import.
  - info:
      name: Retrieve import logs.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/import/subscribers/logs'
    docs: Retrieve logs from an ongoing import.
  - info:
      name: Stop an ongoing import.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/import/subscribers'
    docs: Stop and delete an ongoing import.
- info:
    name: Bounces
    type: folder
  items:
  - info:
      name: Retrieve bounce records.
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/bounces'
    docs: Retrieve bounce records.
  - info:
      name: Delete bounce records.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/bounces'
    docs: Delete bounce records by ID or all.
  - info:
      name: Delete a single bounce record.
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/bounces/{{bounce_id}}'
    docs: Delete a single bounce record.