Skip to content

Webhooks & Automation Platforms

Connect MailJawn to automation tools like Zapier, n8n, and Make.com to sync subscribers from other services. This page covers inbound data flows — getting subscriber data into MailJawn from external sources.

Public Subscribe Endpoint

The simplest integration is the public subscribe endpoint. It accepts form submissions without an API key — your project UUID acts as implicit authorization.

POST /api/v1/projects/{project_id}/subscribe/

This is the same endpoint used by signup forms. It works for any tool that can send an HTTP POST.

Parameter Required Description
email Yes Subscriber's email address
name No Display name
tag No A single tag to apply

Example:

curl -X POST "https://api.mailjawn.com/api/v1/projects/{project_id}/subscribe/" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "name": "Jane", "tag": "zapier"}'

Response (200):

{"status": "subscribed", "email": "user@example.com"}

Bot Protection

The endpoint includes a honeypot field called website. If this field has any value, the request is silently accepted but the subscriber is not created. This prevents bots from inflating your list.

For automation tools, simply don't include the website field in your payload.

Rate Limits

The public endpoint is rate-limited to 10 requests per minute per IP address. For higher-volume syncs, use the authenticated identify endpoint instead.

For richer data — custom fields, multiple tags, device info, automation control — use the authenticated identify endpoint:

POST /api/v1/projects/{project_id}/subscribers/identify/
Authorization: Bearer mj_your_api_key_here
Content-Type: application/json

This endpoint creates the subscriber if they're new, or updates them if they already exist (upsert by email).

{
  "email": "user@example.com",
  "name": "Jane Doe",
  "custom_fields": {
    "plan": "pro",
    "source": "posthog"
  },
  "tags": ["paying-customer"],
  "trigger_automations": true
}

Response (200):

{
  "subscriber_id": "550e8400-e29b-41d4-a716-446655440000",
  "created": true
}

Tip

Create an API key with the SDK scope bundle (subscribers:write + events:write). That's the minimum needed for webhook integrations. See Account > API Keys.

For the full endpoint reference, see REST API > Identify Subscriber.

Automation Platform Patterns

MailJawn doesn't have native integrations with automation platforms. Instead, you use each platform's HTTP request capabilities to call the MailJawn REST API directly. This is simple to set up and gives you full control over the data you send.

Zapier

Use the Webhooks by Zapier action to send subscriber data to MailJawn.

  1. Trigger: Choose your trigger (e.g., "New Purchase in Stripe", "New Contact in HubSpot")
  2. Action: Select Webhooks by Zapier > POST
  3. Configure the action:

    Field Value
    URL https://api.mailjawn.com/api/v1/projects/{project_id}/subscribers/identify/
    Payload Type JSON
    Headers Authorization: Bearer mj_your_api_key
  4. Map fields from your trigger to the request body:

    {
      "email": "{{trigger.email}}",
      "name": "{{trigger.name}}",
      "custom_fields": {
        "plan": "{{trigger.plan}}"
      },
      "tags": ["zapier"]
    }
    

n8n

Use the HTTP Request node to call the MailJawn API.

  1. Add an HTTP Request node after your trigger
  2. Configure:

    Setting Value
    Method POST
    URL https://api.mailjawn.com/api/v1/projects/{project_id}/subscribers/identify/
    Authentication Header Auth
    Header Name Authorization
    Header Value Bearer mj_your_api_key
    Body Content Type JSON
  3. Set the JSON body:

    {
      "email": "{{ $json.email }}",
      "name": "{{ $json.name }}",
      "custom_fields": {
        "source": "n8n"
      },
      "tags": ["n8n-sync"]
    }
    

Make.com (Integromat)

Use the HTTP > Make a request module.

  1. Add an HTTP > Make a request module after your trigger
  2. Configure:

    Setting Value
    URL https://api.mailjawn.com/api/v1/projects/{project_id}/subscribers/identify/
    Method POST
    Headers Authorization: Bearer mj_your_api_key
    Body type Raw (JSON)
  3. Set the request body using mapped fields from your trigger.

PostHog

Sync identified users from PostHog to MailJawn using PostHog's webhook destination.

  1. In PostHog, go to Data Pipelines > Destinations
  2. Create a Webhook destination
  3. Configure:

    Setting Value
    URL https://api.mailjawn.com/api/v1/projects/{project_id}/subscribers/identify/
    Method POST
    Headers Authorization: Bearer mj_your_api_key
  4. Map the payload to include the user's email and any properties you want to sync.

Inbound SES Webhooks

MailJawn automatically processes bounce and complaint notifications from Amazon SES. When an email bounces or a recipient marks it as spam, MailJawn updates the subscriber's status accordingly.

This is handled internally — you don't need to configure anything. The webhook endpoint at /webhooks/ses/ receives SNS notifications, verifies their cryptographic signatures, and processes:

  • Hard bounces — subscriber status set to bounced
  • Soft bounces — logged but no status change
  • Complaints — subscriber status set to complained

Bounced and complained subscribers are automatically suppressed from future sends. See Deliverability > Bounces for more on how MailJawn handles delivery feedback.


See also: REST API | Subscribers > Subscribe Forms | Account > API Keys