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)
Open your campaign → Leads.
Add one lead manually and include all fields you want to include (e.g., First Name, Last Name, Email, Website Link, Company Name).
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
.