Developer

MightyAutomation API

Effective v1 · mightyautomation.com

Connect MightyAutomation to anything: pull contacts and leads out, push contacts, tags, notes, files and automation enrollments in, and subscribe webhooks for every CRM event. One API key per project — minted in the app, no OAuth dance required.

01Getting started & authentication

The MightyAutomation API is project-scoped: every request acts on the project your API key belongs to. There is no project parameter on any route — the project is resolved from the key itself, so a key can never address another tenant.

All endpoints are served over HTTPS at base URL:

https://mightyautomation.com

Getting an API key

  1. Sign in to MightyAutomation and open your project.
  2. Go to Integrations → Zapier & other tools → Set up.
  3. Click Generate Zapier key and copy it — it is shown once. Keys look like mva_zapier_….

Authenticating requests

Send the key as a Bearer token on every request:

curl https://mightyautomation.com/api/agent/me \
  -H "Authorization: Bearer mva_zapier_YOUR_KEY"

Errors & limits

  • Errors return { "ok": false, "error": "<code>" } — 401 invalid_api_key, 403 insufficient_scope, 429 rate_limited.
  • Rate limit: ~60 requests/minute per key.
  • Validate any key with GET /api/agent/me — it returns the bound project name.

02Contacts

Create, search, and update CRM contacts. The upsert matches on email (case-insensitive); tags are merged, never replaced, and notes are appended.

EndpointWhat it does
GET /api/agent/contactsList contacts, newest first. Query: email (find one), created_after, limit (≤200), offset.
POST /api/agent/contactsCreate or update a contact by email. Body: email (required), first_name, last_name, phone, company, lifecycle, pipeline_stage, source, tags[], notes, custom.
GET /api/agent/contacts/{id}Contact detail with recent activity and upcoming events.
PATCH /api/agent/contacts/{id}Update fields: pipeline_stage, lifecycle, tags, phone, names, do_not_contact.
POST /api/agent/contacts/{id}/notesAppend a note to the contact timeline. Body: { "content": "…" }.
POST /api/agent/contacts/tagsAdd tags. Locate by contact_id or email; body requires tags[].

Example — upsert a lead

curl -X POST https://mightyautomation.com/api/agent/contacts \
  -H "Authorization: Bearer mva_zapier_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "phone": "+15551234567",
    "company": "Acme Inc",
    "tags": ["inbound-lead"],
    "notes": "Came in via Zapier"
  }'

→ { "ok": true, "created": true, "contact_id": "…", "events": ["contact_created"] }

03Leads & pipeline

Search leads with CRM filters and read the project's pipeline stages (needed for valid pipeline_stage values and the Stage Changed trigger).

EndpointWhat it does
GET /api/agent/leadsLead search. Query: q, stage, lifecycle, has_phone=true, limit/offset.
GET /api/agent/pipeline-stagesPipeline stage names in board order.

04Events & REST-hook webhooks

MightyAutomation records a project-scoped event feed for everything that matters in the CRM and forms. Subscribe an HTTPS endpoint and we POST each event to it as it happens — this is the contract the native Zapier app uses for its triggers.

EndpointWhat it does
GET /api/agent/eventsEvent feed, newest first. Query: type, since, limit (≤100).
POST /api/agent/hooksSubscribe a target URL to an event type. Body: { "event_type": "…", "target_url": "https://…" } — or * for all types.
GET /api/agent/hooksList active subscriptions (with delivery status).
DELETE /api/agent/hooks/{id}Unsubscribe (idempotent).

Event types

contact_createdtag_addedentered_stagelifecycle_changedform_submittedactivity_loggedappointment_bookedappointment_rescheduledappointment_cancelledappointment_completedappointment_no_showcall_completedcall_outcome

Delivery payload

Each delivery POSTs one event object: id, type, occurred_at, contact (expanded contact), and data (event-specific fields). Any 2xx is a success; subscriptions that fail repeatedly are quarantined automatically.

05Automations & scheduling

EndpointWhat it does
GET /api/agent/automationsList the project's automations (id, name, status).
POST /api/agent/enrollEnroll a contact in an automation. Locate the automation by automation_id or automation_name; the contact by contact_id or email.
GET /api/agent/appointmentsUpcoming appointments (optional from/to).
GET /api/agent/booking-linksBooking links the project exposes.

06Files & media

Import a remote file (e.g. an image or document URL from Notion, a form tool, or an email attachment) into the project's Media Assets.

EndpointWhat it does
POST /api/agent/filesBody: url (required, https), name, contact_id (optional — attaches a note to that contact).

07Inbound webhooks

For tools that can only send data — Zapier's Webhooks by Zapier, Make, a form backend, or a custom app — each project can mint named inbound webhook URLs from Integrations → Custom Webhooks. No API key needed: the token in the URL is the credential.

EndpointWhat it does
POST /api/hooks/{token}Custom webhook endpoint created in the dashboard. Accepts any JSON (or form-encoded) body up to 32 KB. Each endpoint is configured with one target: crm_contact (upsert by email; unmapped fields are preserved on the contact), form (runs the payload through an existing platform form — validation, spam checks, notifications and automations all fire), automation (enroll the contact in a chosen automation), or log (capture only — inspect the payload first). Optional Authorization: Bearer enforcement and token rotation are built in; every delivery is recorded and can be replayed from the dashboard.
POST /api/inbound-hook/{token}The legacy single catch-hook (one per project) — same CRM upsert behavior, still supported.
POST /api/forms/{formId}/{token}/submitSubmit directly into a specific platform form — JSON { "email": "…", "name": "…" } or FormData. The full pipeline fires: validation, spam scoring, notifications, CRM contact creation, automations. Off-platform sites can be allow-listed via the form's External origins setting (CORS preflight supported).

Example — Zapier "Webhooks by Zapier → POST" to a custom webhook

curl -X POST https://mightyautomation.com/api/hooks/wk_your_token_here \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "first_name": "Jane",
    "phone": "+15551234567",
    "plan": "annual"
  }'

→ { "ok": true, "detail": "created contact 5f1b…" }
   (field_mapping on the hook can rename any payload keys first)

08Connect with Zapier (no code)

The native Mighty Automation app on Zapier wraps this API — no URLs or JSON needed:

  1. In Zapier, create a Zap and search for Mighty Automation.
  2. Paste your mva_zapier_… key when asked to connect an account.
  3. Triggers: New Contact, Contact Tagged, Form Submitted, Pipeline Stage Changed, Appointment Booked.
  4. Actions: Create or Update Contact, Add Tag, Add Note, Enroll in Automation, Import File.
  5. Search: Find Contact (with find-or-create).

Endpoints the Zapier app uses

Every operation in the app maps to the public API surface documented above — nothing private or unpublished:

EndpointWhat it does
GET /api/agent/meAuth test — validates the API key and returns the bound project (also the Zapier connection label).
POST /api/agent/hooksAll 5 instant triggers subscribe here — REST hooks for contact_created, tag_added, form_submitted, entered_stage, appointment_booked. Sample polling uses GET /api/agent/events?type=…; unsubscribe is DELETE /api/agent/hooks/{id}.
GET /api/agent/pipeline-stagesHidden trigger List Stages — powers the Pipeline Stage dropdown.
GET /api/agent/automationsHidden trigger List Automations — powers the Automation dropdown.
GET /api/agent/contactsHidden trigger List Contacts — powers the Contact ID dropdowns. Also the Find Contact search (?email=).
POST /api/agent/contactsAction Create or Update Contact — upsert by email, then re-reads GET /api/agent/contacts/{id} for the full record.
POST /api/agent/contacts/tagsAction Add Tag to Contact — merge tags by email or contact id.
POST /api/agent/contacts/{id}/notesAction Add Note to Contact — appends to the CRM timeline.
POST /api/agent/enrollAction Enroll Contact in Automation.
POST /api/agent/filesAction Import File to Media Library.

Example — instant trigger lifecycle

# Subscribe (when the Zap turns on)
POST https://mightyautomation.com/api/agent/hooks
{ "event_type": "appointment_booked", "target_url": "https://hooks.zapier.com/…" }
→ { "ok": true, "id": "sub_…" }

# We then POST each event to the target URL as it happens:
{
  "id": "evt_…",
  "type": "appointment_booked",
  "occurred_at": "2026-01-20T16:00:00Z",
  "contact": { "email": "jane@example.com", "first_name": "Jane", … },
  "data": {
    "title": "Discovery Call",
    "scheduled_at": "2026-01-20T16:00:00Z",
    "meeting_url": "https://meet.google.com/abc-defg"
  }
}

Example — Enroll Contact in Automation

POST https://mightyautomation.com/api/agent/enroll
{ "automation_id": "a1b2…", "email": "jane@example.com" }
→ { "ok": true, "status": "succeeded", "run_id": "r_…" }

Example — Find Contact (search)

GET https://mightyautomation.com/api/agent/contacts?email=jane%40example.com
→ { "ok": true, "contacts": [ { "id": "c8b2…", "email": "jane@example.com", … } ] }

09Machine-readable spec

The full API is described as OpenAPI 3 at GET /api/agent/openapi.json — feed it to any OpenAPI-aware tool, AI agent, or integration copilot to discover every pathway programmatically.

Questions: support@mightyautomation.com.