MMI's webhook system enables integration with partner platforms by delivering real-time data about loan officers, lenders, and real estate agents directly to your endpoints. When you interact with profiles or data within MMI, relevant information is automatically pushed to your configured webhook URL as structured JSON payloads. This integration allows partners to enrich their platforms with MMI's comprehensive mortgage and real estate intelligence. The webhook system supports three primary data types - loan officer profiles with NMLS information and performance metrics, lender company data with transaction volumes, and real estate agent profiles with listing and sales activity.
General Webhook Behavior
How Webhooks Work Event Trigger: An action happens in the MMI application (e.g., a new listing matches).
Webhook Fired: The source application sends an HTTP POST request to a specified URL.
Payload: This request includes a JSON data packet (the payload) containing details about the event.
Endpoint Reception: The destination application, listening at that URL (provided by you), receives the data and processes it.
Automation: The received data triggers further actions in the destination system, like updating a database, sending an email, or triggering another service.
1. Loan Officer Payload
Sample Payload:
{ "nmls": "1919928", "nmls_id": "1919928", "timestamp": "2025-09-23 14:07:42",
"mmi_user": "jordan@mmi.io", "type": "Mortgage", "fastfacts":
"https://new.mmi.run/nmls/1919928", "first_name": "Robert", "last_name": "Linder",
"company": "CMG Mortgage, Inc.", "oppapp": "Platinum", "google":
"https://www.google.com/search?q=Robert+Linder+mortgage+CMG+Mortgage%2C+Inc.+TX+1820",
"email": "rlinder@revolutionmortgage.com", "personal_email":
"rlinder@revolutionmortgage.com", "linkedin":
"https://www.linkedin.com/search/results/people/?keywords=Robert+Linder+loan officer",
"branch_address": "1560 W Bay Area Blvd Ste 140", "branch_city": "Friendswood",
"branch_zip": "77546", "state": "TX", "lo_ytd_volume": "16995878",
"lo_ytd_transactions": "56", "lo_rolling_volume": "23865111",
"lo_rolling_transactions": "76" }Key Fields
- Identifiers: nmls, nmls_id
- Contact: first_name, last_name, email, personal_email, linkedin
- Company Info: company, branch_address, branch_city, branch_zip, state
- Metrics: Year-to-date and rolling volume/transactions (lo_ytd_volume, lo_rolling_transactions, etc.)
- Links: fastfacts, google
2. Lender Payload
Sample Payload:
{ "nmls": "3029", "timestamp": "2025-09-23 14:07:42", "mmi_user": "jordan@mmi.io",
"type": "Lender", "address": "2160 Superior Avenue, Cleveland, OH", "fastfacts":
"https://new.mmi.run/lenders/3029", "name": "CrossCountry Mortgage, LLC",
"purchase_fourteen": "35414304238", "refi_fourteen": "12018948091",
"newconstruction_fourteen": "1600600293", "constructionloan_fourteen": "222455788",
"conv_fourteen": "34831475620", "va_fourteen": 4483189590, "usda_fourteen": 79314145 }Key Fields
- Identifiers: nmls
- Company Info: name, address
-
Performance Metrics (Trailing 14 Months):
- purchase_fourteen
- refi_fourteen
- newconstruction_fourteen
- constructionloan_fourteen
- conv_fourteen, va_fourteen, usda_fourteen, nonqm_fourteen
Coming Soon:
- Array of lender beneficiaries
- Array of executive contacts
3. Real Estate Agent Payload
Sample Payload:
{ "timestamp": "2025-09-23 14:05:08", "mmi_user": "jordan@mmi.io", "type": "Real
Estate", "fastfacts": "https://new.mmi.run/agents/2075786782115806930", "first_name":
"JASON", "last_name": "FRANKLIN", "company": "EXP Realty, LLC", "agent_id":
"2075786782115806930", "oppapp": "Diamond", "email": "jason@frgrpllc.com", "phone":
"2817993598", "branch_address": "2050 W Sam Houston Pkwy S Ste 1500", "branch_city":
"Houston", "state": "TX", "agent_active_listings": "13", "agent_active_volume":
"5664890", "agent_rolling_buyside_volume": "8409538", "agent_ytd_buyside_transactions":
"17", "agent_ytd_listside_volume": "5498250" }Key Fields
- Identifiers: agent_id
- Contact: first_name, last_name, email, phone, linkedin
- Company Info: company, branch_address, branch_city, state
- Performance Metrics: active listings, rolling buy-side/list-side transactions, YTD volumes
4. Listing Alert Payload
Info. sent with our Agent Tracking Emails
Sample Payload:
json
{ "zip": "343328697", "city": "Eugene", "nmls": "1704735", "state": "OR", "status": "SOLD", "address": "5665 Magnificence Way", "list_date": "2025-10-16", "photo_url": "https://mls-images.housecanary.com/listings/34cd59a1663cd520/118e5ca6b3ae463cbde75b348eb83fee.jpg", "sold_date": "2026-01-09", "list_price": 545800, "listing_id": "343328697", "close_price": 545800, "mmi_user_email": "justinz@cmghomeloans.com", "sold_agent_email": "sudha@dcfinehomes.com", "sold_agent_phone": "5417317242", "sold_agent_office": "DC Real Estate Inc", "buyer_agent_ff_url": "https://new.mmi.run/agent/ORVSUDHA", "tracked_agent_name": "BRANDON FLETCHER", "listing_agent_email": "brandon@teamzebrowski.com", "listing_agent_phone": "5416063634", "sold_agent_fullname": "SUDHA VAIKUNTAM", "listing_agent_ff_url": "https://new.mmi.run/agent/ORBRANDONF", "listing_agent_office": "RE/MAX Integrity", "tracked_agent_office": "RE/MAX Integrity", "listing_agent_fullname": "BRANDON FLETCHER" }Key Fields:
-
listing_id— unique identifier for the property listing -
nmls— identifies the loan officer in NMLS registry -
mmi_user_email— links the record to the MMI user account
Property Location (composite key for address matching):
addresscitystatezip
Transaction Status:
-
status— drives business logic (SOLD, Active, Pending, etc.) -
list_date/sold_date— timeline tracking -
list_price/close_price— financial data
Agent Relationships:
-
tracked_agent_name— the agent being monitored (core to MMI's value prop) -
listing_agent_email/sold_agent_email— for matching and outreach
Integration Best Practices
- Secure Your Endpoint: Use HTTPS and validate signatures.
- Handle Nulls Gracefully: Some fields may be null.
- Store Links for Enrichment: fastfacts and google URLs can enrich your UI.
- Deduplicate Events: Use unique identifiers with timestamp for idempotency.
- Expandability: Expect new fields to be added; parse dynamically and ignore unknown keys.
FAQ
Q: What happens if my webhook endpoint is temporarily unavailable? A: MMI will automatically retry delivery if your endpoint returns a non-2xx status code. Ensure your endpoint can handle duplicate payloads gracefully using the provided unique identifiers.
Q: How should I handle authentication for incoming webhooks? A: We recommend validating webhook authenticity using shared secret signatures delivered via HTTP headers. Always use HTTPS endpoints to ensure secure data transmission.
Q: Can I expect the payload structure to remain consistent? A: While core fields will remain stable, new fields may be added over time. Design your integration to parse dynamically and ignore unknown fields to ensure forward compatibility.
Q: What should I do if I receive duplicate webhook payloads? A: Use the unique identifiers (nmls, agent_id) combined with timestamps to deduplicate events. The idempotency design means the same event may be delivered multiple times.
Comments
0 comments
Article is closed for comments.