[{"data":1,"prerenderedAt":1735},["ShallowReactive",2],{"blog-\u002Fblog\u002Femail-verification-gate-signup-form":3,"blog-related-\u002Fblog\u002Femail-verification-gate-signup-form":1466},{"id":4,"title":5,"author":6,"body":7,"category":1451,"cover":1452,"description":1453,"draft":1454,"extension":1455,"image":1451,"launchCta":1451,"listingCover":1451,"meta":1456,"navigation":508,"ogImage":1451,"path":1457,"publishedAt":1458,"readTime":1451,"seo":1459,"stem":1460,"tags":1461,"toolCategory":1451,"updatedAt":1451,"__hash__":1465},"blogUnlisted\u002Fblog\u002Femail-verification-gate-signup-form.md","Add an Email Verification Gate to Your Signup Form","The Monid Team",{"type":8,"value":9,"toc":1435},"minimark",[10,15,88,99,104,149,153,174,179,188,196,204,208,265,273,277,283,331,338,342,352,408,422,429,433,436,764,774,778,781,1317,1323,1329,1333,1339,1343,1350,1356,1359,1363,1366,1370,1380,1389,1395,1401,1413,1417,1431],[11,12,14],"p",{"style":13},"font-size:18px !important;line-height:1.65 !important;margin:0 0 24px;color:inherit;","Copy this line to your agent to add an email verification gate to your signup form.",[16,17,22],"pre",{"className":18,"code":19,"language":20,"meta":21,"style":21},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use strale to validate the email on my signup form before I create the account\n","sh","",[23,24,25],"code",{"__ignoreMap":21},[26,27,30,34,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,85],"span",{"class":28,"line":29},"line",1,[26,31,33],{"class":32},"s2Zo4","set",[26,35,37],{"class":36},"sfazB"," up",[26,39,40],{"class":36}," https:\u002F\u002Fmonid.ai\u002FSKILL.md",[26,42,43],{"class":36}," and",[26,45,46],{"class":36}," use",[26,48,49],{"class":36}," strale",[26,51,52],{"class":36}," to",[26,54,55],{"class":36}," validate",[26,57,58],{"class":36}," the",[26,60,61],{"class":36}," email",[26,63,64],{"class":36}," on",[26,66,67],{"class":36}," my",[26,69,70],{"class":36}," signup",[26,72,73],{"class":36}," form",[26,75,76],{"class":36}," before",[26,78,79],{"class":36}," I",[26,81,82],{"class":36}," create",[26,84,58],{"class":36},[26,86,87],{"class":36}," account\n",[11,89,90,91,98],{},"Put a real-time email check between the submit button and the account, and a junk address never becomes a row. One call classifies the address on the way in: valid syntax, live MX, not a throwaway, actually deliverable. You accept the good ones, offer a correction on an obvious typo, and block the dead ones at the door instead of scrubbing them out of your list three months later. This walkthrough wires that gate into a signup handler, step by step, against an endpoint you can run today. ",[92,93,97],"a",{"href":94,"rel":95},"https:\u002F\u002Fmonid.ai",[96],"nofollow","Monid"," is a pay-per-call data API marketplace: one key and one wallet reach hundreds of external data endpoints, so verification is a single call you meter, not a vendor you onboard.",[100,101,103],"h2",{"id":102},"tldr","TL;DR",[105,106,107,121,130,133,140],"ul",{},[108,109,110,111,116,117,120],"li",{},"The gate is one call in the handler. Send the submitted address to ",[92,112,115],{"href":113,"rel":114},"https:\u002F\u002Fstrale.io",[96],"Strale"," ",[23,118,119],{},"\u002Fx402\u002Femail-validate"," and read the verdict before you write the user row.",[108,122,123,124,129],{},"One response covers the whole decision: ",[92,125,128],{"href":126,"rel":127},"https:\u002F\u002Fdatatracker.ietf.org\u002Fdoc\u002Fhtml\u002Frfc5322",[96],"RFC 5322"," syntax, MX presence, disposable-domain detection, role-based pattern flags, free-provider flags, a typo suggestion, and a deliverability assessment.",[108,131,132],{},"Branch three ways: accept a deliverable address, re-prompt with the suggested fix on a typo, block or soft-warn on a dead or disposable one.",[108,134,135,136,139],{},"Read the schema for free with ",[23,137,138],{},"monid inspect"," before you spend, and decide fail-open vs fail-closed for the case where the check itself times out.",[108,141,142,143,148],{},"Priced per call at a few cents, drawn from the same wallet as the rest of your data stack. Live numbers are at ",[92,144,147],{"href":145,"rel":146},"https:\u002F\u002Fmonid.ai\u002Ftools",[96],"monid.ai\u002Ftools",".",[100,150,152],{"id":151},"what-you-are-building","What you are building",[11,154,155,156,159,160,163,164,169,170,173],{},"A branch in your registration handler: ",[23,157,158],{},"submitted email -> verdict -> accept, correct, or block",". Client-side ",[23,161,162],{},"type=\"email\""," and the browser's ",[92,165,168],{"href":166,"rel":167},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FLearn\u002FForms\u002FForm_validation",[96],"built-in form validation"," catch the shape of an address, not whether it can receive mail. ",[23,171,172],{},"sam@mailinator.com"," is perfectly well-formed and completely useless to you. The gate runs server-side, after submit and before the insert, so the shape check stays in the browser and the deliverability check sits where a user cannot skip it.",[175,176,178],"h3",{"id":177},"for-agents","For agents",[11,180,181,182,187],{},"Grab an API key at ",[92,183,186],{"href":184,"rel":185},"https:\u002F\u002Fapp.monid.ai\u002F",[96],"app.monid.ai",", then paste this to your agent and hand it the key:",[16,189,194],{"className":190,"code":192,"language":193},[191],"language-text","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md\n","text",[23,195,192],{"__ignoreMap":21},[11,197,198,199,148],{},"It learns the whole discover, inspect, run workflow itself. More details in the ",[92,200,203],{"href":201,"rel":202},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-skill",[96],"agent quickstart",[175,205,207],{"id":206},"for-humans","For humans",[16,209,213],{"className":210,"code":211,"language":212,"meta":21,"style":21},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -g @monid-ai\u002Fcli\nmonid keys add --label main --key \u003Cyour-api-key>\n","bash",[23,214,215,230],{"__ignoreMap":21},[26,216,217,221,224,227],{"class":28,"line":29},[26,218,220],{"class":219},"sBMFI","npm",[26,222,223],{"class":36}," install",[26,225,226],{"class":36}," -g",[26,228,229],{"class":36}," @monid-ai\u002Fcli\n",[26,231,233,236,239,242,245,248,251,255,258,262],{"class":28,"line":232},2,[26,234,235],{"class":219},"monid",[26,237,238],{"class":36}," keys",[26,240,241],{"class":36}," add",[26,243,244],{"class":36}," --label",[26,246,247],{"class":36}," main",[26,249,250],{"class":36}," --key",[26,252,254],{"class":253},"sMK4o"," \u003C",[26,256,257],{"class":36},"your-api-ke",[26,259,261],{"class":260},"sTEyZ","y",[26,263,264],{"class":253},">\n",[11,266,267,268,148],{},"More details in the ",[92,269,272],{"href":270,"rel":271},"https:\u002F\u002Fmonid.ai\u002Fdocs\u002Fguide\u002Fquickstart-cli",[96],"CLI quickstart",[100,274,276],{"id":275},"step-1-read-the-schema-before-you-spend","Step 1. Read the schema before you spend",[11,278,279,282],{},[23,280,281],{},"inspect"," is free and prints the exact input shape and the price, so you never burn a paid run on a field the endpoint does not accept.",[16,284,286],{"className":210,"code":285,"language":212,"meta":21,"style":21},"monid inspect -p api.strale.io -e \u002Fx402\u002Femail-validate\n# input:   query param \"email\" (string, required)\n# pricing: PER_CALL, cents-scale, shown before you run\n# returns: RFC 5322 syntax, MX, disposable, role, free-provider,\n#          typo suggestion, deliverability assessment\n",[23,287,288,307,313,319,325],{"__ignoreMap":21},[26,289,290,292,295,298,301,304],{"class":28,"line":29},[26,291,235],{"class":219},[26,293,294],{"class":36}," inspect",[26,296,297],{"class":36}," -p",[26,299,300],{"class":36}," api.strale.io",[26,302,303],{"class":36}," -e",[26,305,306],{"class":36}," \u002Fx402\u002Femail-validate\n",[26,308,309],{"class":28,"line":232},[26,310,312],{"class":311},"sHwdD","# input:   query param \"email\" (string, required)\n",[26,314,316],{"class":28,"line":315},3,[26,317,318],{"class":311},"# pricing: PER_CALL, cents-scale, shown before you run\n",[26,320,322],{"class":28,"line":321},4,[26,323,324],{"class":311},"# returns: RFC 5322 syntax, MX, disposable, role, free-provider,\n",[26,326,328],{"class":28,"line":327},5,[26,329,330],{"class":311},"#          typo suggestion, deliverability assessment\n",[11,332,333,334,337],{},"One input, one query parameter named ",[23,335,336],{},"email",". That is the whole contract, which is why this drops into a handler in a few lines.",[100,339,341],{"id":340},"step-2-make-the-one-call-that-decides","Step 2. Make the one call that decides",[11,343,344,345,347,348,351],{},"This is the only step that costs money. Feed the submitted address into the ",[23,346,336],{}," query param. The ",[23,349,350],{},"-w"," flag waits inline and hands the verdict straight back, which is exactly what a request handler needs.",[16,353,355],{"className":210,"code":354,"language":212,"meta":21,"style":21},"monid run -p api.strale.io -e \u002Fx402\u002Femail-validate \\\n  --query '{\"email\": \"hello@gmial.com\"}' -w\n# -> deliverability verdict + syntax, MX, disposable, role, free-provider,\n#    and a typo suggestion (gmial.com -> gmail.com)\n#    billed per call, price shown before it ran\n",[23,356,357,376,393,398,403],{"__ignoreMap":21},[26,358,359,361,364,366,368,370,373],{"class":28,"line":29},[26,360,235],{"class":219},[26,362,363],{"class":36}," run",[26,365,297],{"class":36},[26,367,300],{"class":36},[26,369,303],{"class":36},[26,371,372],{"class":36}," \u002Fx402\u002Femail-validate",[26,374,375],{"class":260}," \\\n",[26,377,378,381,384,387,390],{"class":28,"line":232},[26,379,380],{"class":36},"  --query",[26,382,383],{"class":253}," '",[26,385,386],{"class":36},"{\"email\": \"hello@gmial.com\"}",[26,388,389],{"class":253},"'",[26,391,392],{"class":36}," -w\n",[26,394,395],{"class":28,"line":315},[26,396,397],{"class":311},"# -> deliverability verdict + syntax, MX, disposable, role, free-provider,\n",[26,399,400],{"class":28,"line":321},[26,401,402],{"class":311},"#    and a typo suggestion (gmial.com -> gmail.com)\n",[26,404,405],{"class":28,"line":327},[26,406,407],{"class":311},"#    billed per call, price shown before it ran\n",[11,409,410,411,414,415,418,419,421],{},"Note the ",[23,412,413],{},"--query"," flag, not ",[23,416,417],{},"-i",". This endpoint takes its input as a query parameter, so the address rides in ",[23,420,413],{},", not in a request body. The response is one JSON object with the full assessment, so a single call settles whether the row stays or goes.",[11,423,424],{},[425,426],"img",{"alt":427,"src":428},"The signup gate as a decision tree: the email-validate verdict routes a deliverable address to account creation, a likely typo to a re-prompt with the fix, and a no-MX, disposable, or role address to block or soft-warn","\u002Fimg\u002Fblog\u002Femail-verification-gate-signup-form-fig-signup-gate.png",[100,430,432],{"id":431},"step-3-branch-on-the-verdict","Step 3. Branch on the verdict",[11,434,435],{},"Read three things out of the response and turn them into a decision. Deliverability gates the accept, the typo suggestion drives a re-prompt, and the disposable and MX flags drive the block. Here it is as a small shell branch you can lift straight into a handler.",[16,437,439],{"className":210,"code":438,"language":212,"meta":21,"style":21},"result=$(monid run -p api.strale.io -e \u002Fx402\u002Femail-validate \\\n  --query \"{\\\"email\\\": \\\"$email\\\"}\" -w -o -)\n\ndeliverable=$(jq -r '.deliverable      \u002F\u002F false' \u003C\u003C\u003C\"$result\")\nsuggestion=$(jq  -r '.typo_suggestion   \u002F\u002F empty' \u003C\u003C\u003C\"$result\")\ndisposable=$(jq  -r '.disposable        \u002F\u002F false' \u003C\u003C\u003C\"$result\")\n\nif [ -n \"$suggestion\" ]; then\n  echo \"reprompt: did you mean $suggestion ?\"     # offer the fix, do not save yet\nelif [ \"$disposable\" = \"true\" ]; then\n  echo \"block: throwaway address\"                 # hard stop\nelif [ \"$deliverable\" = \"true\" ]; then\n  echo \"accept: create the account\"               # clean row, proceed\nelse\n  echo \"soft-warn: undeliverable, ask to re-check\" # no MX, dead mailbox\nfi\n",[23,440,441,463,504,510,542,571,600,605,631,652,681,696,722,737,743,758],{"__ignoreMap":21},[26,442,443,446,449,451,453,455,457,459,461],{"class":28,"line":29},[26,444,445],{"class":260},"result",[26,447,448],{"class":253},"=$(",[26,450,235],{"class":219},[26,452,363],{"class":36},[26,454,297],{"class":36},[26,456,300],{"class":36},[26,458,303],{"class":36},[26,460,372],{"class":36},[26,462,375],{"class":260},[26,464,465,467,470,473,476,478,480,483,486,489,492,495,498,501],{"class":28,"line":232},[26,466,380],{"class":36},[26,468,469],{"class":253}," \"",[26,471,472],{"class":36},"{",[26,474,475],{"class":260},"\\\"",[26,477,336],{"class":36},[26,479,475],{"class":260},[26,481,482],{"class":36},": ",[26,484,485],{"class":260},"\\\"$email\\\"",[26,487,488],{"class":36},"}",[26,490,491],{"class":253},"\"",[26,493,494],{"class":36}," -w",[26,496,497],{"class":36}," -o",[26,499,500],{"class":36}," -",[26,502,503],{"class":253},")\n",[26,505,506],{"class":28,"line":315},[26,507,509],{"emptyLinePlaceholder":508},true,"\n",[26,511,512,515,517,520,523,525,528,530,533,535,538,540],{"class":28,"line":321},[26,513,514],{"class":260},"deliverable",[26,516,448],{"class":253},[26,518,519],{"class":219},"jq",[26,521,522],{"class":36}," -r",[26,524,383],{"class":253},[26,526,527],{"class":36},".deliverable      \u002F\u002F false",[26,529,389],{"class":253},[26,531,532],{"class":253}," \u003C\u003C\u003C",[26,534,491],{"class":253},[26,536,537],{"class":260},"$result",[26,539,491],{"class":253},[26,541,503],{"class":253},[26,543,544,547,549,551,554,556,559,561,563,565,567,569],{"class":28,"line":327},[26,545,546],{"class":260},"suggestion",[26,548,448],{"class":253},[26,550,519],{"class":219},[26,552,553],{"class":36},"  -r",[26,555,383],{"class":253},[26,557,558],{"class":36},".typo_suggestion   \u002F\u002F empty",[26,560,389],{"class":253},[26,562,532],{"class":253},[26,564,491],{"class":253},[26,566,537],{"class":260},[26,568,491],{"class":253},[26,570,503],{"class":253},[26,572,574,577,579,581,583,585,588,590,592,594,596,598],{"class":28,"line":573},6,[26,575,576],{"class":260},"disposable",[26,578,448],{"class":253},[26,580,519],{"class":219},[26,582,553],{"class":36},[26,584,383],{"class":253},[26,586,587],{"class":36},".disposable        \u002F\u002F false",[26,589,389],{"class":253},[26,591,532],{"class":253},[26,593,491],{"class":253},[26,595,537],{"class":260},[26,597,491],{"class":253},[26,599,503],{"class":253},[26,601,603],{"class":28,"line":602},7,[26,604,509],{"emptyLinePlaceholder":508},[26,606,608,612,615,618,620,623,625,628],{"class":28,"line":607},8,[26,609,611],{"class":610},"s7zQu","if",[26,613,614],{"class":253}," [",[26,616,617],{"class":253}," -n",[26,619,469],{"class":253},[26,621,622],{"class":260},"$suggestion",[26,624,491],{"class":253},[26,626,627],{"class":253}," ];",[26,629,630],{"class":610}," then\n",[26,632,634,637,639,642,644,647,649],{"class":28,"line":633},9,[26,635,636],{"class":32},"  echo",[26,638,469],{"class":253},[26,640,641],{"class":36},"reprompt: did you mean ",[26,643,622],{"class":260},[26,645,646],{"class":36}," ?",[26,648,491],{"class":253},[26,650,651],{"class":311},"     # offer the fix, do not save yet\n",[26,653,655,658,660,662,665,667,670,672,675,677,679],{"class":28,"line":654},10,[26,656,657],{"class":610},"elif",[26,659,614],{"class":253},[26,661,469],{"class":253},[26,663,664],{"class":260},"$disposable",[26,666,491],{"class":253},[26,668,669],{"class":253}," =",[26,671,469],{"class":253},[26,673,674],{"class":36},"true",[26,676,491],{"class":253},[26,678,627],{"class":253},[26,680,630],{"class":610},[26,682,684,686,688,691,693],{"class":28,"line":683},11,[26,685,636],{"class":32},[26,687,469],{"class":253},[26,689,690],{"class":36},"block: throwaway address",[26,692,491],{"class":253},[26,694,695],{"class":311},"                 # hard stop\n",[26,697,699,701,703,705,708,710,712,714,716,718,720],{"class":28,"line":698},12,[26,700,657],{"class":610},[26,702,614],{"class":253},[26,704,469],{"class":253},[26,706,707],{"class":260},"$deliverable",[26,709,491],{"class":253},[26,711,669],{"class":253},[26,713,469],{"class":253},[26,715,674],{"class":36},[26,717,491],{"class":253},[26,719,627],{"class":253},[26,721,630],{"class":610},[26,723,725,727,729,732,734],{"class":28,"line":724},13,[26,726,636],{"class":32},[26,728,469],{"class":253},[26,730,731],{"class":36},"accept: create the account",[26,733,491],{"class":253},[26,735,736],{"class":311},"               # clean row, proceed\n",[26,738,740],{"class":28,"line":739},14,[26,741,742],{"class":610},"else\n",[26,744,746,748,750,753,755],{"class":28,"line":745},15,[26,747,636],{"class":32},[26,749,469],{"class":253},[26,751,752],{"class":36},"soft-warn: undeliverable, ask to re-check",[26,754,491],{"class":253},[26,756,757],{"class":311}," # no MX, dead mailbox\n",[26,759,761],{"class":28,"line":760},16,[26,762,763],{"class":610},"fi\n",[11,765,766,767,770,771,773],{},"The typo branch is the one that earns its keep on a live form. A user who fumbled ",[23,768,769],{},"gmial.com"," is a real person you would otherwise lose to a silent bounce. Handing back the suggested correction turns a dead signup into a good one before the account exists. Match the exact field names to what your ",[23,772,281],{}," output shows, since the branch is only as good as the fields it reads.",[100,775,777],{"id":776},"step-4-drop-the-gate-into-the-handler","Step 4. Drop the gate into the handler",[11,779,780],{},"Now put it where submit lands. The pattern is the same in any stack: run the check, branch, and only reach the insert on the accept path. Here it is in a Node handler that shells out to the CLI, so the account is never created until the address clears.",[16,782,786],{"className":783,"code":784,"language":785,"meta":21,"style":21},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const { execFile } = require(\"node:child_process\");\n\napp.post(\"\u002Fsignup\", (req, res) => {\n  const email = req.body.email;\n  execFile(\"monid\", [\n    \"run\", \"-p\", \"api.strale.io\", \"-e\", \"\u002Fx402\u002Femail-validate\",\n    \"--query\", JSON.stringify({ email }), \"-w\", \"-o\", \"-\",\n  ], (err, stdout) => {\n    if (err) return res.status(503).json({ error: \"verification unavailable\" });\n    const v = JSON.parse(stdout);\n    if (v.typo_suggestion) return res.status(422).json({ suggest: v.typo_suggestion });\n    if (v.disposable || !v.deliverable) return res.status(422).json({ error: \"undeliverable\" });\n    createAccount(email);                         \u002F\u002F only clean addresses get here\n    res.status(201).json({ ok: true });\n  });\n});\n","js",[23,787,788,823,827,869,892,911,959,1016,1039,1097,1123,1179,1244,1261,1300,1309],{"__ignoreMap":21},[26,789,790,794,797,800,802,804,807,810,812,815,817,820],{"class":28,"line":29},[26,791,793],{"class":792},"spNyl","const",[26,795,796],{"class":253}," {",[26,798,799],{"class":260}," execFile ",[26,801,488],{"class":253},[26,803,669],{"class":253},[26,805,806],{"class":32}," require",[26,808,809],{"class":260},"(",[26,811,491],{"class":253},[26,813,814],{"class":36},"node:child_process",[26,816,491],{"class":253},[26,818,819],{"class":260},")",[26,821,822],{"class":253},";\n",[26,824,825],{"class":28,"line":232},[26,826,509],{"emptyLinePlaceholder":508},[26,828,829,832,834,837,839,841,844,846,849,852,856,858,861,863,866],{"class":28,"line":315},[26,830,831],{"class":260},"app",[26,833,148],{"class":253},[26,835,836],{"class":32},"post",[26,838,809],{"class":260},[26,840,491],{"class":253},[26,842,843],{"class":36},"\u002Fsignup",[26,845,491],{"class":253},[26,847,848],{"class":253},",",[26,850,851],{"class":253}," (",[26,853,855],{"class":854},"sHdIc","req",[26,857,848],{"class":253},[26,859,860],{"class":854}," res",[26,862,819],{"class":253},[26,864,865],{"class":792}," =>",[26,867,868],{"class":253}," {\n",[26,870,871,874,876,878,881,883,886,888,890],{"class":28,"line":321},[26,872,873],{"class":792},"  const",[26,875,61],{"class":260},[26,877,669],{"class":253},[26,879,880],{"class":260}," req",[26,882,148],{"class":253},[26,884,885],{"class":260},"body",[26,887,148],{"class":253},[26,889,336],{"class":260},[26,891,822],{"class":253},[26,893,894,897,900,902,904,906,908],{"class":28,"line":327},[26,895,896],{"class":32},"  execFile",[26,898,809],{"class":899},"swJcz",[26,901,491],{"class":253},[26,903,235],{"class":36},[26,905,491],{"class":253},[26,907,848],{"class":253},[26,909,910],{"class":899}," [\n",[26,912,913,916,919,921,923,925,928,930,932,934,937,939,941,943,946,948,950,952,954,956],{"class":28,"line":573},[26,914,915],{"class":253},"    \"",[26,917,918],{"class":36},"run",[26,920,491],{"class":253},[26,922,848],{"class":253},[26,924,469],{"class":253},[26,926,927],{"class":36},"-p",[26,929,491],{"class":253},[26,931,848],{"class":253},[26,933,469],{"class":253},[26,935,936],{"class":36},"api.strale.io",[26,938,491],{"class":253},[26,940,848],{"class":253},[26,942,469],{"class":253},[26,944,945],{"class":36},"-e",[26,947,491],{"class":253},[26,949,848],{"class":253},[26,951,469],{"class":253},[26,953,119],{"class":36},[26,955,491],{"class":253},[26,957,958],{"class":253},",\n",[26,960,961,963,965,967,969,972,974,977,979,981,983,986,988,990,992,994,996,998,1000,1003,1005,1007,1009,1012,1014],{"class":28,"line":602},[26,962,915],{"class":253},[26,964,413],{"class":36},[26,966,491],{"class":253},[26,968,848],{"class":253},[26,970,971],{"class":260}," JSON",[26,973,148],{"class":253},[26,975,976],{"class":32},"stringify",[26,978,809],{"class":899},[26,980,472],{"class":253},[26,982,61],{"class":260},[26,984,985],{"class":253}," }",[26,987,819],{"class":899},[26,989,848],{"class":253},[26,991,469],{"class":253},[26,993,350],{"class":36},[26,995,491],{"class":253},[26,997,848],{"class":253},[26,999,469],{"class":253},[26,1001,1002],{"class":36},"-o",[26,1004,491],{"class":253},[26,1006,848],{"class":253},[26,1008,469],{"class":253},[26,1010,1011],{"class":36},"-",[26,1013,491],{"class":253},[26,1015,958],{"class":253},[26,1017,1018,1021,1023,1025,1028,1030,1033,1035,1037],{"class":28,"line":607},[26,1019,1020],{"class":899},"  ]",[26,1022,848],{"class":253},[26,1024,851],{"class":253},[26,1026,1027],{"class":854},"err",[26,1029,848],{"class":253},[26,1031,1032],{"class":854}," stdout",[26,1034,819],{"class":253},[26,1036,865],{"class":792},[26,1038,868],{"class":253},[26,1040,1041,1044,1046,1048,1051,1054,1056,1058,1061,1063,1067,1069,1071,1074,1076,1078,1081,1084,1086,1089,1091,1093,1095],{"class":28,"line":633},[26,1042,1043],{"class":610},"    if",[26,1045,851],{"class":899},[26,1047,1027],{"class":260},[26,1049,1050],{"class":899},") ",[26,1052,1053],{"class":610},"return",[26,1055,860],{"class":260},[26,1057,148],{"class":253},[26,1059,1060],{"class":32},"status",[26,1062,809],{"class":899},[26,1064,1066],{"class":1065},"sbssI","503",[26,1068,819],{"class":899},[26,1070,148],{"class":253},[26,1072,1073],{"class":32},"json",[26,1075,809],{"class":899},[26,1077,472],{"class":253},[26,1079,1080],{"class":899}," error",[26,1082,1083],{"class":253},":",[26,1085,469],{"class":253},[26,1087,1088],{"class":36},"verification unavailable",[26,1090,491],{"class":253},[26,1092,985],{"class":253},[26,1094,819],{"class":899},[26,1096,822],{"class":253},[26,1098,1099,1102,1105,1107,1109,1111,1114,1116,1119,1121],{"class":28,"line":654},[26,1100,1101],{"class":792},"    const",[26,1103,1104],{"class":260}," v",[26,1106,669],{"class":253},[26,1108,971],{"class":260},[26,1110,148],{"class":253},[26,1112,1113],{"class":32},"parse",[26,1115,809],{"class":899},[26,1117,1118],{"class":260},"stdout",[26,1120,819],{"class":899},[26,1122,822],{"class":253},[26,1124,1125,1127,1129,1132,1134,1137,1139,1141,1143,1145,1147,1149,1152,1154,1156,1158,1160,1162,1165,1167,1169,1171,1173,1175,1177],{"class":28,"line":683},[26,1126,1043],{"class":610},[26,1128,851],{"class":899},[26,1130,1131],{"class":260},"v",[26,1133,148],{"class":253},[26,1135,1136],{"class":260},"typo_suggestion",[26,1138,1050],{"class":899},[26,1140,1053],{"class":610},[26,1142,860],{"class":260},[26,1144,148],{"class":253},[26,1146,1060],{"class":32},[26,1148,809],{"class":899},[26,1150,1151],{"class":1065},"422",[26,1153,819],{"class":899},[26,1155,148],{"class":253},[26,1157,1073],{"class":32},[26,1159,809],{"class":899},[26,1161,472],{"class":253},[26,1163,1164],{"class":899}," suggest",[26,1166,1083],{"class":253},[26,1168,1104],{"class":260},[26,1170,148],{"class":253},[26,1172,1136],{"class":260},[26,1174,985],{"class":253},[26,1176,819],{"class":899},[26,1178,822],{"class":253},[26,1180,1181,1183,1185,1187,1189,1191,1194,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1236,1238,1240,1242],{"class":28,"line":698},[26,1182,1043],{"class":610},[26,1184,851],{"class":899},[26,1186,1131],{"class":260},[26,1188,148],{"class":253},[26,1190,576],{"class":260},[26,1192,1193],{"class":253}," ||",[26,1195,1196],{"class":253}," !",[26,1198,1131],{"class":260},[26,1200,148],{"class":253},[26,1202,514],{"class":260},[26,1204,1050],{"class":899},[26,1206,1053],{"class":610},[26,1208,860],{"class":260},[26,1210,148],{"class":253},[26,1212,1060],{"class":32},[26,1214,809],{"class":899},[26,1216,1151],{"class":1065},[26,1218,819],{"class":899},[26,1220,148],{"class":253},[26,1222,1073],{"class":32},[26,1224,809],{"class":899},[26,1226,472],{"class":253},[26,1228,1080],{"class":899},[26,1230,1083],{"class":253},[26,1232,469],{"class":253},[26,1234,1235],{"class":36},"undeliverable",[26,1237,491],{"class":253},[26,1239,985],{"class":253},[26,1241,819],{"class":899},[26,1243,822],{"class":253},[26,1245,1246,1249,1251,1253,1255,1258],{"class":28,"line":724},[26,1247,1248],{"class":32},"    createAccount",[26,1250,809],{"class":899},[26,1252,336],{"class":260},[26,1254,819],{"class":899},[26,1256,1257],{"class":253},";",[26,1259,1260],{"class":311},"                         \u002F\u002F only clean addresses get here\n",[26,1262,1263,1266,1268,1270,1272,1275,1277,1279,1281,1283,1285,1288,1290,1294,1296,1298],{"class":28,"line":739},[26,1264,1265],{"class":260},"    res",[26,1267,148],{"class":253},[26,1269,1060],{"class":32},[26,1271,809],{"class":899},[26,1273,1274],{"class":1065},"201",[26,1276,819],{"class":899},[26,1278,148],{"class":253},[26,1280,1073],{"class":32},[26,1282,809],{"class":899},[26,1284,472],{"class":253},[26,1286,1287],{"class":899}," ok",[26,1289,1083],{"class":253},[26,1291,1293],{"class":1292},"sfNiH"," true",[26,1295,985],{"class":253},[26,1297,819],{"class":899},[26,1299,822],{"class":253},[26,1301,1302,1305,1307],{"class":28,"line":745},[26,1303,1304],{"class":253},"  }",[26,1306,819],{"class":899},[26,1308,822],{"class":253},[26,1310,1311,1313,1315],{"class":28,"line":760},[26,1312,488],{"class":253},[26,1314,819],{"class":260},[26,1316,822],{"class":253},[11,1318,1319,1320,1322],{},"The ",[23,1321,1151],{}," on a typo carries the suggestion back to the form so the browser can render \"did you mean gmail.com?\" and let the user accept it with one tap. The insert sits behind the gate, so a disposable or undeliverable address never becomes a user.",[11,1324,1325],{},[425,1326],{"alt":1327,"src":1328},"The gate wired into the form: the user submits, the handler calls email-validate, reads the verdict, and branches to accept, re-prompt, or reject","\u002Fimg\u002Fblog\u002Femail-verification-gate-signup-form-fig-form-wire.png",[100,1330,1332],{"id":1331},"step-5-decide-what-happens-when-the-check-times-out","Step 5. Decide what happens when the check times out",[11,1334,1335,1336,1338],{},"A network call can hang, and your signup form cannot. Pick a policy on purpose. Fail-open lets the signup through when the check is unreachable, which protects conversion at the cost of an occasional bad row. Fail-closed blocks until the check answers, which protects the list at the cost of turning away a real user during an outage. Most consumer signups fail-open with a short timeout and re-verify async; a cold-outreach list that lives or dies on sender reputation fails-closed. The ",[23,1337,1066],{}," path in Step 4 is where that choice lives: return it to block, or wave the signup through and queue a re-check. Either way, set a timeout so a slow check never becomes a stuck button.",[100,1340,1342],{"id":1341},"what-this-costs-to-run","What this costs to run",[11,1344,1345,1346,1349],{},"You see the exact price before every run, and it is always on ",[92,1347,147],{"href":145,"rel":1348},[96],". In magnitude terms:",[16,1351,1354],{"className":1352,"code":1353,"language":193},[191],"Inspect the schema        free\nemail-validate            a few cents PER_CALL   (once per real submit)\nBranch + handler          your own code, free\n--------------------------------------------------------------\nTypical signup: one call, a few cents\nTen thousand signups: still tens of dollars, not a subscription\n",[23,1355,1353],{"__ignoreMap":21},[11,1357,1358],{},"The gate only fires on a real submit, so a burst of bot signups that never make it past your other defenses never bills you for verification you did not want. There is no pack to size in advance and nothing that expires, because the call draws from the same pay-as-you-go wallet as the rest of your data stack.",[100,1360,1362],{"id":1361},"hand-it-to-an-agent","Hand it to an agent",[11,1364,1365],{},"The same gate runs without you in the loop. Because Monid ships as an MCP server, an agent that owns your signup flow can inspect the endpoint, run the check on each submitted address, apply the accept, correct, and block rules above, and only then create the account. Free discovery and a per-call price shown before each run are what make that safe to delegate: the agent can price the step before it spends.",[100,1367,1369],{"id":1368},"faq","FAQ",[11,1371,1372,1376,1377,148],{},[1373,1374,1375],"strong",{},"Do I need a Strale account?","\nNo. Integrate Monid once and fund one pay-as-you-go wallet. Strale is reached through the same key, billed at the price shown before each run. Live numbers are at ",[92,1378,147],{"href":145,"rel":1379},[96],[11,1381,1382,1385,1386,1388],{},[1373,1383,1384],{},"Client-side or server-side?","\nBoth, for different jobs. Keep the browser's ",[23,1387,162],{}," and built-in validation for the shape of an address, and run the deliverability gate server-side after submit, where a user cannot bypass it and your key stays off the page.",[11,1390,1391,1394],{},[1373,1392,1393],{},"Will this slow down my form?","\nIt adds one network call to the submit path, so set a timeout and pick a fail-open or fail-closed policy as in Step 5. Consumer signups usually fail-open with a short timeout; reputation-sensitive lists fail-closed.",[11,1396,1397,1400],{},[1373,1398,1399],{},"What about the typo path specifically?","\nWhen the response carries a typo suggestion, do not save the row. Return the suggestion to the form and let the user confirm the fix. That recovers a real signup that would otherwise bounce silently.",[11,1402,1403,1406,1407,1409,1410,148],{},[1373,1404,1405],{},"How is this priced?","\nPer call, a few cents, with the number shown before you run by a free ",[23,1408,138],{},". No minimum, no pack, nothing that expires, drawn from the shared wallet. Current prices are at ",[92,1411,147],{"href":145,"rel":1412},[96],[100,1414,1416],{"id":1415},"ship-it","Ship it",[11,1418,1419,1420,1426,1427,148],{},"Inspect ",[92,1421,1424],{"href":1422,"rel":1423},"https:\u002F\u002Fapi.strale.io\u002Fx402\u002Femail-validate",[96],[23,1425,119],{}," for free to see its schema and price, run it against ten addresses whose fate you already know, and confirm the verdicts match. Then wire Step 3 and Step 4 into your signup handler, pick your timeout policy, and let the gate keep the junk off your list. Start at ",[92,1428,1430],{"href":94,"rel":1429},[96],"monid.ai",[1432,1433,1434],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":21,"searchDepth":232,"depth":232,"links":1436},[1437,1438,1442,1443,1444,1445,1446,1447,1448,1449,1450],{"id":102,"depth":232,"text":103},{"id":151,"depth":232,"text":152,"children":1439},[1440,1441],{"id":177,"depth":315,"text":178},{"id":206,"depth":315,"text":207},{"id":275,"depth":232,"text":276},{"id":340,"depth":232,"text":341},{"id":431,"depth":232,"text":432},{"id":776,"depth":232,"text":777},{"id":1331,"depth":232,"text":1332},{"id":1341,"depth":232,"text":1342},{"id":1361,"depth":232,"text":1362},{"id":1368,"depth":232,"text":1369},{"id":1415,"depth":232,"text":1416},null,"\u002Fimg\u002Fblog\u002Femail-verification-gate-signup-form.png","A hands-on guide to wiring real-time email verification into a signup form so junk and undeliverable addresses are caught before they reach your list.",false,"md",{},"\u002Fblog\u002Femail-verification-gate-signup-form","2026-07-22",{"title":5,"description":1453},"blog\u002Femail-verification-gate-signup-form",[1462,1463,1464],"email verification","data","signup","tzFD6wCCeL5g26lj5nJmp32XxlsdDcukIkXn6m8op-s",[1467,1528,1596,1662],{"id":1468,"title":1469,"author":1451,"body":1470,"category":1451,"cover":1514,"description":21,"draft":1454,"extension":1455,"image":1451,"launchCta":1515,"listingCover":1451,"meta":1518,"navigation":508,"ogImage":1451,"path":1519,"publishedAt":1520,"readTime":1451,"seo":1521,"stem":1522,"tags":1523,"toolCategory":1451,"updatedAt":1451,"__hash__":1527},"blog\u002Fblog\u002Fakta-pro-is-now-available-on-monid.md","Introducing private markets\ndata for agents",{"type":8,"value":1471,"toc":1510},[1472,1476,1484,1487,1491,1497,1504,1507],[100,1473,1475],{"id":1474},"what-is-aktapro","What is akta.pro",[11,1477,1478,1483],{},[92,1479,1482],{"href":1480,"rel":1481},"https:\u002F\u002Fwww.akta.pro\u002F",[96],"akta.pro"," is a private company data and signals API for\nAI agents. Company Database covers 20M+ companies with 75+ structured fields\neach. News Signals delivers deduplicated, entity-resolved company news,\nindustry news, and signals on open-ended topics, all scored for impact and\nsentiment.",[11,1485,1486],{},"Private-company research is usually scattered across databases, news feeds,\nreview sites, and web search. akta.pro turns that into structured API calls, so\nan agent gets the right company context and keeps moving.",[100,1488,1490],{"id":1489},"what-is-monid","What is Monid",[11,1492,1493,1496],{},[92,1494,97],{"href":94,"rel":1495},[96]," is the tool layer for agents. It lets agents connect\nto all the tools and APIs they need, without managing signups, API keys, or\nsubscriptions.",[11,1498,1499,1500,148],{},"Today, Monid provides tools for social media scraping, web search, image and\nmusic generation, people data search, weather APIs, ",[92,1501,1503],{"href":145,"rel":1502},[96],"and more",[1505,1506],"hr",{},[11,1508,1509],{},"On Monid, akta.pro becomes available as part of that same layer. Your agent can\nrequest private-company context, call akta.pro through Monid, receive structured\nmarket data, and continue the task. Private markets research should feel like\nany other tool call: describe the company or sector, get the signal, keep\nbuilding.",{"title":21,"searchDepth":232,"depth":232,"links":1511},[1512,1513],{"id":1474,"depth":232,"text":1475},{"id":1489,"depth":232,"text":1490},"\u002Fimg\u002Fblog\u002Fakta-pro-is-now-available-on-monid-v2.png",{"label":1516,"command":1517},"Give your agent this line to get started.","set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use akta.pro to research recent news, company enrichment, and alternative signals for Databricks",{},"\u002Fblog\u002Fakta-pro-is-now-available-on-monid","2026-07-07",{"title":1469,"description":21},"blog\u002Fakta-pro-is-now-available-on-monid",[1524,1525,1526,1463],"agents","partner-tools","private-markets","05ST9oH9qSQ4_vNxcczvHDEyev2JDIqBwMiM-zelWJo",{"id":1529,"title":1530,"author":1451,"body":1531,"category":1451,"cover":1585,"description":1586,"draft":1454,"extension":1455,"image":1451,"launchCta":1451,"listingCover":1451,"meta":1587,"navigation":508,"ogImage":1451,"path":1588,"publishedAt":1589,"readTime":1451,"seo":1590,"stem":1591,"tags":1592,"toolCategory":1451,"updatedAt":1451,"__hash__":1595},"blog\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls.md","Your Claude Code can now make phone calls",{"type":8,"value":1532,"toc":1581},[1533,1536,1545,1549,1557,1560,1562,1567,1573,1575,1578],[11,1534,1535],{"style":13},"Copy this line to your agent to make your first phone call.",[16,1537,1539],{"className":18,"code":1538,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and use Saperly to call my phone number to confirm the connection works\n",[23,1540,1541],{"__ignoreMap":21},[26,1542,1543],{"class":28,"line":29},[26,1544,1538],{},[100,1546,1548],{"id":1547},"what-is-saperly","What is Saperly",[11,1550,1551,1556],{},[92,1552,1555],{"href":1553,"rel":1554},"https:\u002F\u002Fsaperly.com\u002F",[96],"Saperly"," is phone infrastructure for AI agents. It gives\nan agent a real phone number with voice, SMS, routing, spend controls, and\ncompliance built in, without making the builder manage carrier accounts or\ntelephony paperwork.",[11,1558,1559],{},"Your agent can confirm an appointment, follow up on a lead, check availability,\nor route a conversation without leaving the workflow it is already running.",[100,1561,1490],{"id":1489},[11,1563,1564,1496],{},[92,1565,97],{"href":94,"rel":1566},[96],[11,1568,1569,1570,148],{},"Today, Monid provides tools for social media scraping, web search, image \u002F\nmusic \u002F 3d model generation, people data search, weather APIs, ",[92,1571,1503],{"href":145,"rel":1572},[96],[1505,1574],{},[11,1576,1577],{},"On Monid, Saperly becomes available as part of that same layer. Your agent can\nrequest a phone call, use Saperly through Monid, receive the result, and keep\ngoing. Calling should feel like any other tool call: describe the outcome, let\nthe agent handle the phone work, and continue the task.",[1432,1579,1580],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":232,"depth":232,"links":1582},[1583,1584],{"id":1547,"depth":232,"text":1548},{"id":1489,"depth":232,"text":1490},"\u002Fimg\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls.png","Saperly is now available on Monid. Your agent can now make phone calls for you.",{},"\u002Fblog\u002Fyour-claude-code-can-now-make-phone-calls","2026-07-05",{"title":1530,"description":1586},"blog\u002Fyour-claude-code-can-now-make-phone-calls",[1524,1525,1593,1594],"voice","phone","Wp96EVH5j2eyHDSu2f5Rtv0RYmyWX7frAhalel9fOus",{"id":1597,"title":1598,"author":1451,"body":1599,"category":1451,"cover":1651,"description":1652,"draft":1454,"extension":1455,"image":1451,"launchCta":1451,"listingCover":1451,"meta":1653,"navigation":508,"ogImage":1451,"path":1654,"publishedAt":1655,"readTime":1451,"seo":1656,"stem":1657,"tags":1658,"toolCategory":1451,"updatedAt":1451,"__hash__":1661},"blog\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models.md","Introducing\nClaude for 3D models",{"type":8,"value":1600,"toc":1647},[1601,1604,1613,1617,1625,1628,1630,1635,1640,1642,1645],[11,1602,1603],{"style":13},"Copy this line to your agent to generate your 3D model.",[16,1605,1607],{"className":18,"code":1606,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and create a 3D model for a rabbit\n",[23,1608,1609],{"__ignoreMap":21},[26,1610,1611],{"class":28,"line":29},[26,1612,1606],{},[100,1614,1616],{"id":1615},"what-is-suzanne","What is Suzanne",[11,1618,1619,1624],{},[92,1620,1623],{"href":1621,"rel":1622},"https:\u002F\u002Fwww.suzanne3d.com",[96],"Suzanne"," is an AI-native 3D modeling tool that turns a prompt into a\nusable 3D asset. Instead of opening a modeling tool, blocking out forms,\nadding details, and exporting by hand, you describe what you want and let\nSuzanne generate the model for you.",[11,1626,1627],{},"That changes who can create 3D objects. Product teams can prototype visual\nideas faster. Game builders can rough out props and characters without\nwaiting on a full art pass. Agents can generate assets as part of a larger\nworkflow, then hand those files to downstream tools for rendering, testing,\nor iteration.",[100,1629,1490],{"id":1489},[11,1631,1632,1496],{},[92,1633,97],{"href":94,"rel":1634},[96],[11,1636,1499,1637,148],{},[92,1638,1503],{"href":145,"rel":1639},[96],[1505,1641],{},[11,1643,1644],{},"On Monid, Suzanne becomes available as part of that same layer. Your agent can\nask for the 3D asset it needs, call Suzanne through Monid, and continue the task.\n3D creation should feel as direct as text generation: describe the thing, get\nthe artifact, keep building.",[1432,1646,1580],{},{"title":21,"searchDepth":232,"depth":232,"links":1648},[1649,1650],{"id":1615,"depth":232,"text":1616},{"id":1489,"depth":232,"text":1490},"\u002Fimg\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models.png","Suzanne is now available on Monid. Turn any idea into a production-ready 3D model in one prompt.",{},"\u002Fblog\u002Fintroducing-suzanne-chatgpt-for-3d-models","2026-06-25",{"title":1598,"description":1652},"blog\u002Fintroducing-suzanne-chatgpt-for-3d-models",[1659,1524,1660],"3d","creative-tools","Mz475YlhLBgR80gyiTlL2MhfALZKYwbl4Rfwy96HZG0",{"id":1663,"title":1664,"author":1451,"body":1665,"category":1451,"cover":1724,"description":1725,"draft":1454,"extension":1455,"image":1451,"launchCta":1451,"listingCover":1451,"meta":1726,"navigation":508,"ogImage":1451,"path":1727,"publishedAt":1728,"readTime":1451,"seo":1729,"stem":1730,"tags":1731,"toolCategory":1451,"updatedAt":1451,"__hash__":1734},"blog\u002Fblog\u002Fminimax-is-now-available-on-monid.md","MiniMax is now available on Monid",{"type":8,"value":1666,"toc":1719},[1667,1670,1679,1683,1691,1695,1698,1700,1706,1712,1714,1717],[11,1668,1669],{"style":13},"Copy this line to your agent to create music.",[16,1671,1673],{"className":18,"code":1672,"language":20,"meta":21,"style":21},"set up https:\u002F\u002Fmonid.ai\u002FSKILL.md and create a song with MiniMax Music 2.6\n",[23,1674,1675],{"__ignoreMap":21},[26,1676,1677],{"class":28,"line":29},[26,1678,1672],{},[100,1680,1682],{"id":1681},"minimax-music-26","MiniMax Music 2.6",[11,1684,1685,1690],{},[92,1686,1689],{"href":1687,"rel":1688},"https:\u002F\u002Fwww.minimax.io",[96],"MiniMax"," Music 2.6 turns a prompt into music your agent can use right away. Describe the style, mood, lyrics, or use case, and generate a track inside the same workflow.",[100,1692,1694],{"id":1693},"minimax-text-to-image-image-01","MiniMax Text-to-Image image-01",[11,1696,1697],{},"MiniMax image-01 turns text prompts into images. Ask for a concept, scene, product visual, or creative asset, and let your agent generate it through Monid.",[100,1699,1490],{"id":1489},[11,1701,1702,1705],{},[92,1703,97],{"href":94,"rel":1704},[96]," is the tool layer for agents. It lets agents connect to all the tools and APIs they need, without managing signups, API keys, or subscriptions.",[11,1707,1708,1709,148],{},"Today, Monid provides tools for social media scraping, web search, image and music generation, people data search, weather APIs, ",[92,1710,1503],{"href":145,"rel":1711},[96],[1505,1713],{},[11,1715,1716],{},"On Monid, MiniMax becomes part of the same tool layer your agent already uses. Describe what you need, generate the image or music, and keep building.",[1432,1718,1580],{},{"title":21,"searchDepth":232,"depth":232,"links":1720},[1721,1722,1723],{"id":1681,"depth":232,"text":1682},{"id":1693,"depth":232,"text":1694},{"id":1489,"depth":232,"text":1490},"\u002Fimg\u002Fblog\u002Fminimax-is-now-available-on-monid.png","Create images and music with MiniMax models through Monid.",{},"\u002Fblog\u002Fminimax-is-now-available-on-monid","2026-06-24",{"title":1664,"description":1725},"blog\u002Fminimax-is-now-available-on-monid",[1524,1660,1732,1733],"image-generation","music-generation","B3dZqIjNJNK7Y9ysAenI0XzKobOZMlEP87FRWrW19Vc",1786670265392]