Skip to main content

MailMoo API

How to push leads into a MailMoo campaign and optionally render media

Miro avatar
Written by Miro
Updated over 3 weeks ago

Incoming events let you POST lead data into a specific campaign from external systems (forms, CRMs, automations). You decide whether MailMoo should render a video and/or a slideshow for each lead.

💡Incoming events are campaign-specific.

Endpoint

Copy your unique endpoint from Campaign → Webhooks → Incoming Events.

It follows this pattern:

POST https://app.mailmoo.io/api/v2/campaigns/uploadLeads?id=<CAMPAIGN_ID>&render=<true|false>&renderSlide=<true|false>
  • render=true → render the video.

  • renderSlide=true → render the slideshow.

  • Set both to false to only add the lead (useful for LinkedIn-only campaigns without media).

Request body

Send JSON containing the lead fields used by your campaign. The schema is dynamic and based on your Lead Structure.

Example:

{ 
"First Name": "REPLACE_WITH_FIRST_NAME",
"Last Name": "REPLACE_WITH_LAST_NAME",
"Email": "REPLACE_WITH_EMAIL",
"Website Link": "REPLACE_WITH_WEBSITE_LINK",
"Company Name": "REPLACE_WITH_COMPANY_NAME"
}

Default schema: {} until you define variables for the campaign.

Define the schema (one-time setup)

  1. Open your campaign → Leads.

  2. Add one lead manually and include all fields you want to include (e.g., First Name, Last Name, Email, Website Link, Company Name).

  3. These fields become the accepted keys for incoming requests.

cURL examples

A) Add lead and render both video + slideshow

curl -X POST \
"https://app.mailmoo.io/api/v2/campaigns/uploadLeads?id=<CAMPAIGN_ID>&render=true&renderSlide=true" \
-H "Content-Type: application/json" \
-d '{
"First Name": "REPLACE_WITH_FIRST_NAME",
"Last Name": "REPLACE_WITH_LAST_NAME",
"Email": "REPLACE_WITH_EMAIL",
"Website Link": "REPLACE_WITH_WEBSITE_LINK",
"Company Name": "REPLACE_WITH_COMPANY_NAME"
}'

B) Add lead only (no rendering)

curl -X POST \
"https://app.mailmoo.io/api/v2/campaigns/uploadLeads?id=<CAMPAIGN_ID>&render=false&renderSlide=false" \
-H "Content-Type: application/json" \
-d '{
"First Name": "REPLACE_WITH_FIRST_NAME",
"Last Name": "REPLACE_WITH_LAST_NAME",
"Email": "REPLACE_WITH_LAST_NAME"
}'

Troubleshooting

  • 400/validation errors: make sure your JSON keys match the campaign’s field names exactly (including spacing/case).

  • No media rendered: confirm render / renderSlide query params.

  • Lead not visible: verify you posted to the correct campaign ID.

Typical uses

  • Add form signups as leads and automatically render personalized assets.

  • Sync CRM stage changes to MailMoo campaigns.

  • Feed LinkedIn-only sequences with render=false&renderSlide=false.

Did this answer your question?