[{"data":1,"prerenderedAt":195},["ShallowReactive",2],{"pseo:platforms:openai":3,"highlight:platform:openai":181},{"auth_method":4,"ban_risk":5,"capabilities":6,"example_flows":73,"faqs":121,"http_module":131,"name":134,"official_connector_note":135,"recipes":136,"related":140,"seo":155,"setup_steps":169,"setup_time":175,"slug":176,"tier":177,"type":178,"updated":167,"url":163,"webhook_trigger":179},"The relay holds the Wapito token server-side; the model never sees it","high",[7,16,22,27,32,38,43,49,56,62,67],{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":12,"slug":13,"summary":14,"url":15},"ga","groups","forbidden",true,"Create Group","create-group","Open a WhatsApp group from your own backend.","\u002Fwhatsapp-api\u002Fcreate-group\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":18,"slug":19,"summary":20,"url":21},false,"Group Participants","group-participants","Add, remove and list members of a WhatsApp group.","\u002Fwhatsapp-api\u002Fgroup-participants\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":17,"name":23,"slug":24,"summary":25,"url":26},"Group Invite Link","group-invite-link","Read, revoke and resolve group invite links.","\u002Fwhatsapp-api\u002Fgroup-invite-link\u002F",{"availability":8,"category":9,"cloud_api_status":10,"in_flows":11,"name":28,"slug":29,"summary":30,"url":31},"Send Group Message","send-group-message","Send text, media and polls into a WhatsApp group.","\u002Fwhatsapp-api\u002Fsend-group-message\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":17,"name":34,"slug":35,"summary":36,"url":37},"channels","Create Channel","create-channel","Create and manage a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fcreate-channel\u002F",{"availability":8,"category":33,"cloud_api_status":10,"in_flows":11,"name":39,"slug":40,"summary":41,"url":42},"Post to Channel","post-to-channel","Publish text and media to a WhatsApp Channel.","\u002Fwhatsapp-api\u002Fpost-to-channel\u002F",{"availability":8,"category":44,"cloud_api_status":10,"in_flows":17,"name":45,"slug":46,"summary":47,"url":48},"status","Post Status","post-status","Post text, image and video status updates.","\u002Fwhatsapp-api\u002Fpost-status\u002F",{"availability":8,"category":50,"cloud_api_status":51,"in_flows":11,"name":52,"slug":53,"summary":54,"url":55},"messaging","restricted","Send Without Template","send-message-without-template","Send any message with no template approval.","\u002Fwhatsapp-api\u002Fsend-message-without-template\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":11,"name":58,"slug":59,"summary":60,"url":61},"contacts","Check Number","check-number","Check whether a phone number is on WhatsApp.","\u002Fwhatsapp-api\u002Fcheck-number\u002F",{"availability":8,"category":57,"cloud_api_status":51,"in_flows":17,"name":63,"slug":64,"summary":65,"url":66},"LID to Phone","lid-to-phone","Map a WhatsApp LID to a phone number.","\u002Fwhatsapp-api\u002Flid-to-phone\u002F",{"availability":8,"category":68,"cloud_api_status":51,"in_flows":17,"name":69,"slug":70,"summary":71,"url":72},"account","Connect a Number","connect-number-qr-pairing","Link any WhatsApp number by code or QR.","\u002Fwhatsapp-api\u002Fconnect-number-qr-pairing\u002F",[74,88,98,111],{"body":75,"curl":76,"operation":79,"title":87},"The relay receives a message event, asks the model for a reply grounded in your documents, and sends the answer to the chat id. A confidence threshold routes anything uncertain to a human instead of guessing.",{"code":77,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'","bash",{"availability":8,"ban_risk":80,"method":81,"operationId":82,"path":83,"summary":84,"tag":85,"url":86},"medium","POST","sendText","\u002Fmessages\u002Ftext","Send a text message","messages","\u002Fdocs\u002Fapi\u002Fmessages\u002Fsend-text\u002F","Answer customer questions in a chat",{"body":89,"curl":90,"operation":92,"title":97},"A create-group tool is exposed with a fixed participant list drawn from your rota, so the model decides when to escalate but never decides who is in the room. The group id is stored against the ticket.",{"code":91,"lang":78},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"subject\":\"Acme Launch Team\",\"participants\":[\"+15551234567\",\"+15559876543\"],\"description\":\"Coordination for the Q3 launch. Keep it on topic.\"}'",{"availability":8,"ban_risk":5,"method":81,"operationId":93,"path":94,"summary":95,"tag":9,"url":96},"createGroup","\u002Fgroups","Create a group","\u002Fdocs\u002Fapi\u002Fgroups\u002Fcreate-group\u002F","Let the model open a group for an escalation",{"body":99,"curl":100,"operation":102,"title":110},"When someone mentions the bot, the relay pulls recent messages, asks the model for a summary, and posts it back into the group. Recency limits keep the context window - and the cost - predictable.",{"code":101,"lang":78},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&offset=0&from_me=true&time_from=1789372800000&time_to=1789459200000' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'",{"availability":103,"ban_risk":104,"method":105,"operationId":106,"path":107,"summary":108,"tag":85,"url":109},"beta","low","GET","listMessages","\u002Fmessages\u002Flist\u002F{chat_id}","List messages in a chat","\u002Fdocs\u002Fapi\u002Fmessages\u002Flist-messages\u002F","Summarise a group thread on demand",{"body":112,"curl":113,"operation":115,"title":120},"Before acting on a phone number the model read out of a message, the relay checks it and refuses the tool call if no account exists, so a hallucinated digit never turns into a message to a stranger.",{"code":114,"lang":78},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F+15551234567\u002Fexists' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'",{"availability":8,"ban_risk":5,"method":105,"operationId":116,"path":117,"summary":118,"tag":57,"url":119},"checkContactExists","\u002Fcontacts\u002F{id}\u002Fexists","Check one number for WhatsApp","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contact-exists\u002F","Validate a number the model extracted",[122,125,128],{"a":123,"q":124},"No, and it should not. Tool calls are executed by your code, not by the model, which is exactly what lets you validate arguments, enforce per-conversation limits and keep the token server-side. A model that could call the API directly could also be talked into messaging anyone.","Can the model call Wapito directly?",{"a":126,"q":127},"Treat every inbound message as untrusted input rather than as instructions. Keep the tool list small and each schema strict, validate recipients against your own records before sending, and never let a tool take a free-form URL or an arbitrary phone number straight from the conversation.","How do I stop prompt injection reaching the API?",{"a":129,"q":130},"Two meters: model tokens per turn and your Wapito plan for the messaging. Keeping the context window short - recent messages plus a retrieved snippet, not the whole thread - is usually the single biggest lever on the model side, and it improves answer quality as well.","What does this cost to run?",{"docs_url":132,"name":133},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Ffunction-calling","Function calling (tools)","OpenAI","OpenAI publishes no WhatsApp connector, and there is no inbound trigger in the API - a model cannot subscribe to a webhook. Every integration therefore runs through a relay you control, which is also the only safe place to hold both credentials and to enforce limits on what the model may do.",[137],{"feature":53,"title":138,"url":139},"Let an OpenAI model send WhatsApp messages through a relay","\u002Fintegrations\u002Fopenai\u002Fsend-message-without-template\u002F",{"hub":141,"pillars":142,"siblings":151},"\u002Fintegrations\u002F",[143,144,145,148,149,150],{"title":12,"url":15},{"title":28,"url":31},{"title":146,"url":147},"Group Events","\u002Fwhatsapp-api\u002Fgroup-events\u002F",{"title":39,"url":42},{"title":58,"url":61},{"title":52,"url":55},[152],{"title":153,"url":154},"MCP","\u002Fintegrations\u002Fmcp\u002F",{"breadcrumb":156,"canonical":164,"description":165,"h1":166,"lastmod":167,"title":168},[157,160,162],{"name":158,"url":159},"Home","\u002F",{"name":161,"url":141},"Integrations",{"name":134,"url":163},"\u002Fintegrations\u002Fopenai\u002F","https:\u002F\u002Fwapito.com\u002Fintegrations\u002Fopenai\u002F","Connect WhatsApp to OpenAI with the Function calling (tools) and the Your own relay - the model has no inbound trigger. Set up in about 45 minutes.","Integrate WhatsApp with OpenAI","2026-09-15","WhatsApp OpenAI Integration | Wapito",[170,171,172,173,174],"Write a small relay service - a handful of routes in any language - that holds both the Wapito token and the OpenAI key. Neither credential should ever be in a prompt.","Register a webhook in Wapito pointing at the relay, verify the signature on every delivery, and answer with a 2xx immediately before doing any model work.","Define a small set of tools the model may call, such as send a message, create a group or check a number, each with a strict JSON schema and a narrow purpose.","Execute tool calls in the relay against Wapito, not in the model, and validate every argument - especially recipients - before the call goes out.","Send the model's reply back through Wapito with a typing time, so the answer arrives at a human pace rather than instantly.","45 minutes","openai","t3a","ai",{"docs_url":132,"name":180},"Your own relay - the model has no inbound trigger",[182,186,189,192],{"label":183,"id":184,"lang":78,"code":77,"html":185},"curl","flow-0","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Ftext\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"to\":\"+15551234567\",\"body\":\"Your order #4182 has shipped. Track it here: https:\u002F\u002Facme.example\u002Ft\u002F4182\",\"typing_time\":3}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":183,"id":187,"lang":78,"code":91,"html":188},"flow-1","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fgroups\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"subject\":\"Acme Launch Team\",\"participants\":[\"+15551234567\",\"+15559876543\"],\"description\":\"Coordination for the Q3 launch. Keep it on topic.\"}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":183,"id":190,"lang":78,"code":101,"html":191},"flow-2","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fmessages\u002Flist\u002F15551234567@s.whatsapp.net?count=50&#x26;offset=0&#x26;from_me=true&#x26;time_from=1789372800000&#x26;time_to=1789459200000'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":183,"id":193,"lang":78,"code":114,"html":194},"flow-3","\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F+15551234567\u002Fexists'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1790464904167]