Zapier Integration

API Reference

Mail2Follow integrates with Zapier to let users connect their follow-up tracking to thousands of other apps. This page documents the endpoints that power the integration.

Base URL: https://api.mail2follow.com Content-Type: application/json

Authentication

Mail2Follow uses OAuth 2.0 via Google. After the OAuth flow completes, all subsequent requests must include a Bearer token in the Authorization header.

OAuth scopes

openid email
GET /api/integrations/zapier/me Test authentication

Verifies the access token and returns the authenticated user's account details.

Response 200

{
  "id": "usr_abc123",
  "email": "[email protected]",
  "name": "Sarah Johnson",
  "plan": "pro"
}

Triggers

Triggers notify Zapier when something happens in Mail2Follow. Mail2Follow uses REST hooks (webhook subscriptions) with a polling sample endpoint as fallback.

Trigger keys

new_followup followup_overdue reply_received followup_resolved
POST /api/integrations/zapier/subscribe Subscribe webhook

Registers a webhook URL for a given trigger. Called when a user turns on a Zap.

Request body

{
  "hookUrl": "https://hooks.zapier.com/hooks/catch/123/abc",
  "event": "new_followup"
}

Response 201

{
  "id": "sub_xyz789",
  "hookUrl": "https://hooks.zapier.com/hooks/catch/123/abc",
  "event": "new_followup"
}
DELETE /api/integrations/zapier/subscribe/:id Unsubscribe webhook

Removes a webhook subscription. Called when a user turns off a Zap.

Path parameters

Parameter Type Description
id string Subscription ID returned by POST subscribe

Response 200

{}
GET /api/integrations/zapier/triggers/:key/sample Polling fallback

Returns sample records for a trigger key. Used by Zapier as a polling fallback and to let users test their Zaps during setup.

Path parameters

Parameter Values
key new_followup · followup_overdue · reply_received · followup_resolved

Response 200 — example for new_followup

[
  {
    "id": "followup_abc123",
    "threadId": "thread_xyz789",
    "recipientEmail": "[email protected]",
    "recipientName": "Sarah Johnson",
    "emailSubject": "Re: Web redesign proposal",
    "emailType": "proposal",
    "dueDate": "2026-05-03T09:00:00Z",
    "daysUntilDue": 5,
    "createdAt": "2026-04-28T14:30:00Z"
  }
]

Webhook payload shape

When a trigger fires, Mail2Follow sends a POST request to the registered hookUrl with this body:

{
  "event": "new_followup",
  "data": {
    "id": "followup_abc123",
    "threadId": "thread_xyz789",
    "recipientEmail": "[email protected]",
    "recipientName": "Sarah Johnson",
    "emailSubject": "Re: Web redesign proposal",
    "emailType": "proposal",
    "dueDate": "2026-05-03T09:00:00Z",
    "daysUntilDue": 5,
    "createdAt": "2026-04-28T14:30:00Z"
  }
}

Actions

Actions let users create or modify Mail2Follow data from other apps via Zapier.

POST /api/integrations/zapier/actions/create_followup

Creates a follow-up reminder for a Gmail thread.

Request body

Field Type Required Description
threadId string Yes Gmail thread ID
emailType string No proposal · invoice · application · general
reminderDays integer No Days until reminder fires (default: auto from emailType)

Example request

{
  "threadId": "thread_xyz789",
  "emailType": "proposal",
  "reminderDays": 5
}

Response 201

{
  "id": "followup_def456",
  "threadId": "thread_xyz789",
  "emailType": "proposal",
  "status": "pending",
  "reminderDays": 5,
  "dueDate": "2026-05-03T09:00:00Z",
  "createdAt": "2026-04-28T14:30:00Z"
}
POST /api/integrations/zapier/actions/resolve_followup

Marks a follow-up as resolved. Useful when a reply is logged externally (e.g. via CRM) and you want to close the reminder in Mail2Follow.

Request body

Field Type Required Description
followupId string Yes ID of the follow-up to resolve

Example request

{
  "followupId": "followup_abc123"
}

Response 200

{
  "id": "followup_abc123",
  "status": "resolved",
  "resolvedAt": "2026-04-28T14:30:00Z"
}

Error responses

All errors follow the same envelope. The code field is machine-readable.

{
  "error": {
    "code": "FOLLOWUP_NOT_FOUND",
    "message": "Follow-up followup_abc123 not found."
  }
}
Status Meaning
401 Missing or invalid Bearer token
403 Token valid but action not permitted (e.g. free plan limit)
404 Resource not found
422 Validation error — check error.message for details
429 Rate limit exceeded

Questions about the integration? Contact support →