[{"data":1,"prerenderedAt":163},["ShallowReactive",2],{"pseo:platforms:zapier:send-message-without-template":3},{"ban_risk":4,"faqs":5,"feature":15,"goal":19,"platform":20,"prerequisites":27,"related":31,"seo":85,"steps":101,"test":136,"tier":137,"troubleshooting":138,"updated":99,"url":95,"verified":162},"medium",[6,9,12],{"a":7,"q":8},"The WhatsApp apps in Zapier's directory are built on Meta's official Cloud API, which only sends pre-approved templates outside a 24-hour customer-service window. The message in this recipe is free text to anyone the number is allowed to write to, which the official platform does not offer, so it goes through Webhooks by Zapier against Wapito instead.","Why can I not use one of the WhatsApp apps listed in Zapier?",{"a":10,"q":11},"Yes, and that is exactly the case to be careful with. A first message to a stranger is a reach-out, and a number that sends many of them from cold is the pattern WhatsApp restricts. Wapito refuses cold sends on a channel that is still warming up and reports a timelock when WhatsApp applies one; the recipe's Filter step is where you keep the Zap to people who asked to hear from you.","Can the Zap send to someone who has never messaged the number?",{"a":13,"q":14},"Use the same Custom Request with the media endpoint for the type, for example the image or document path, and put a public URL to the file or a media id in the body alongside the recipient. Upload once and reuse the media id when the same file goes to many people, because a fresh upload on every task is slower and counts against the same quotas.","How do I send an image or a PDF instead of text?",{"name":16,"slug":17,"url":18},"Send Without Template","send-message-without-template","\u002Fwhatsapp-api\u002Fsend-message-without-template\u002F","Send a WhatsApp message from a Zap in the words you actually wrote, with no template approval, the moment a lead, order or booking appears in another app. There is no customer-service window either. Webhooks by Zapier posts the text to Wapito with the recipient and the body mapped from the trigger, and a Filter step keeps the Zap from messaging anyone it should not.",{"http_module":21,"name":24,"slug":25,"url":26},{"docs_url":22,"name":23},"https:\u002F\u002Fhelp.zapier.com\u002Fhc\u002Fen-us\u002Farticles\u002F8496288690317-Send-webhooks-in-Zaps","Webhooks by Zapier > Custom Request","Zapier","zapier","\u002Fintegrations\u002Fzapier\u002F",[28,29,30],"A Zapier plan that includes Webhooks by Zapier, which is a premium app.","A Wapito channel that is connected, and its channel token.","A trigger app whose records carry a phone number in international format and the fields you want to mention in the message.",{"errors":32,"operations":48,"pillar":18,"platform":26},[33,36,39,42,45],{"title":34,"url":35},"invalid_recipient (400)","\u002Fdocs\u002Ferrors\u002Finvalid-recipient\u002F",{"title":37,"url":38},"message_not_found (404)","\u002Fdocs\u002Ferrors\u002Fmessage-not-found\u002F",{"title":40,"url":41},"reachout_timelocked (423)","\u002Fdocs\u002Ferrors\u002Freachout-timelocked\u002F",{"title":43,"url":44},"cold_send_limit (429)","\u002Fdocs\u002Ferrors\u002Fcold-send-limit\u002F",{"title":46,"url":47},"warmup_limit (429)","\u002Fdocs\u002Ferrors\u002Fwarmup-limit\u002F",[49,52,55,58,61,64,67,70,73,76,79,82],{"title":50,"url":51},"POST \u002Fmessages\u002Ftext","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-text\u002F",{"title":53,"url":54},"POST \u002Fmessages\u002Fimage","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-image\u002F",{"title":56,"url":57},"POST \u002Fmessages\u002Fvideo","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-video\u002F",{"title":59,"url":60},"POST \u002Fmessages\u002Fdocument","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-document\u002F",{"title":62,"url":63},"POST \u002Fmessages\u002Fsticker","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-sticker\u002F",{"title":65,"url":66},"POST \u002Fmessages\u002Faudio","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-audio\u002F",{"title":68,"url":69},"POST \u002Fmessages\u002Fvoice","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-voice\u002F",{"title":71,"url":72},"POST \u002Fmessages\u002Fshort","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-short\u002F",{"title":74,"url":75},"POST \u002Fmessages\u002Flink","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-link\u002F",{"title":77,"url":78},"POST \u002Fmessages\u002Flocation","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-location\u002F",{"title":80,"url":81},"POST \u002Fmessages\u002Fcontact","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-contact\u002F",{"title":83,"url":84},"POST \u002Fmessages\u002Fpoll","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-poll\u002F",{"breadcrumb":86,"canonical":96,"description":97,"h1":98,"lastmod":99,"title":100},[87,90,93,94],{"name":88,"url":89},"Home","\u002F",{"name":91,"url":92},"Integrations","\u002Fintegrations\u002F",{"name":24,"url":26},{"name":16,"url":95},"\u002Fintegrations\u002Fzapier\u002Fsend-message-without-template\u002F","https:\u002F\u002Fwapito.com\u002Fintegrations\u002Fzapier\u002Fsend-message-without-template\u002F","Send a WhatsApp message from a Zap in the words you actually wrote, with no template approval, the moment a lead, order or booking appears in another app.","Send a WhatsApp message from a Zap without a template","2026-09-16","Send WhatsApp Messages from Zapier, No Template | Wapito",[102,107,113,119,126,131],{"body":103,"field_map":104,"title":106},"Pick the trigger that means a message is due, for example New Lead in your CRM or New Order in your shop. Add a Filter by Zapier step immediately after it that only continues when the phone field exists and starts with a plus sign, so the Zap never spends a task on a record it cannot message and never hands Wapito a value that is not a phone number.",{"phone":105},"Trigger field — must exist and start with + for the Filter to continue","Choose the trigger and filter out records with no number",{"body":108,"field_map":109,"title":112},"Add a Webhooks by Zapier action and pick the Custom Request event, which is the one that lets you set the method, the headers and the raw body. Set the method to POST and the URL to https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext. Leave Wrap Request In Array off and Unflatten off, because the body you are about to write is already the exact JSON Wapito expects.",{"Method":110,"URL":111},"POST","https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext","Add Webhooks by Zapier with a Custom Request",{"body":114,"field_map":115,"title":118},"Under Headers add Authorization with the value Bearer followed by your channel token, and Content-Type with the value application\u002Fjson. The token is the only secret in the Zap; if you share the Zap with a teammate, they can read it there, so rotate it from the Wapito dashboard when someone leaves and update this one step.",{"Authorization":116,"Content-Type":117},"Bearer wpt_… (your channel token)","application\u002Fjson","Set the two headers",{"body":120,"field_map":121,"title":125},"In the Data field write the JSON object by hand and insert the trigger fields with the field picker: the phone number as the recipient, the message as the body, and a small typing time so the message arrives at a human pace. Quote every mapped string, and if a field can contain a double quote, run it through Formatter by Zapier first to escape it, or the body will not parse.",{"body":122,"to":123,"typing_time":124},"Hi {{First Name}}, thanks for your order {{Order Number}}. We will confirm shipping here.","{{Phone}} — the trigger's phone field, for example +15551234567","3","Write the JSON body with mapped fields",{"body":127,"field_map":128,"title":130},"Run Test step with a real trigger sample whose phone is your own. Zapier shows the parsed response; the field named id is the message id and status reads sent, which means accepted for delivery rather than delivered. Map that id into a later step, such as an Update Record action on the trigger app, so you can match a status webhook to this send later.",{"message_id":129},"id from the Webhooks response — write it back to the triggering record","Test the step and store the message id",{"body":132,"field_map":133,"title":135},"Open the Zap's settings and turn on autoreplay so a transient error is retried, then add a Paths step or a second Filter on the response code for the errors that should not be retried. A 423 reachout_timelocked means WhatsApp has paused reach-outs from this number, and a 429 send_rate_limited means the queue is saturated; both call for slowing the Zap down, not for sending again.",{"error.code":134},"error.code from the Webhooks response on a non-2xx status","Decide what happens when the send is refused","Turn the Zap on and create a test record in the trigger app with your own number. The Zap history should show the Webhooks step succeeding with a message id, and the text should arrive on your phone within a few seconds with the mapped fields filled in.","t3b",[139,143,147,152,157],{"code":140,"http_status":141,"title":142,"url":35},"invalid_recipient",400,"Recipient is not valid",{"code":144,"http_status":145,"title":146,"url":41},"reachout_timelocked",423,"Reach-outs timelocked",{"code":148,"http_status":149,"title":150,"url":151},"send_rate_limited",429,"Send queue saturated","\u002Fdocs\u002Ferrors\u002Fsend-rate-limited\u002F",{"code":153,"http_status":154,"title":155,"url":156},"unauthorized",401,"Missing or invalid token","\u002Fdocs\u002Ferrors\u002Funauthorized\u002F",{"code":158,"http_status":159,"title":160,"url":161},"channel_not_connected",409,"Channel not connected","\u002Fdocs\u002Ferrors\u002Fchannel-not-connected\u002F",false,1790464904704]