[{"data":1,"prerenderedAt":177},["ShallowReactive",2],{"pseo:features:check-number":3,"highlight:pillar:check-number":172},{"availability":4,"ban_risk":5,"ban_risk_note":6,"category":7,"cloud_api_status":11,"contrast":12,"endpoints":19,"faqs":37,"gotchas":50,"name":53,"published":54,"related":55,"search_terms":124,"seo":129,"slug":144,"step_summary":145,"steps":146,"summary":159,"tier":160,"updated":13,"url":139,"use_cases":161,"webhook_events":171},"ga","high","Bulk number checking is the single most ban-sensitive operation an unofficial API offers, because checking thousands of numbers you have no relationship with is exactly what list harvesting looks like. Wapito meters it per plan for that reason. Check only numbers you actually intend to contact, spread the work over hours rather than minutes, and keep every result so you never check twice.",{"name":8,"slug":9,"url":10},"Contacts","contacts","\u002Fwhatsapp-api\u002Fcontacts\u002F","restricted",{"demand":5,"meta_checked":13,"meta_doc_url":14,"meta_quote":15,"official_workaround":16,"short_verdict":17,"verdict":18},"2026-09-15","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fwhatsapp\u002Fcloud-api\u002Freference","Paraphrase (not a verbatim quote), checked against the Cloud API reference index and the error-code guide: the reference documents no endpoint that reports whether a phone number is registered on WhatsApp; invalid recipients surface as errors on a send attempt.","Send a template to the number and treat a delivery failure as an invalid result. It works, it is charged per message, and it puts a message in front of every valid number whether or not you meant to contact them yet.","Not really. There is no official validation endpoint.","Meta's Cloud API reference has no contact-check node. The only official way to discover that a number is not on WhatsApp is to send it a message - which for a business-initiated conversation means a pre-approved template that you are charged for - and then read the failure. Validation therefore exists, but only as a paid side effect of sending.",[20,29],{"availability":4,"ban_risk":5,"curl":21,"method":24,"operationId":25,"path":26,"summary":27,"tag":9,"url":28},{"code":22,"lang":23},"curl --request POST \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002Fcheck \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"phones\":[\"+15551234567\",\"+15559876543\",\"+15550000000\"]}'","bash","POST","checkContacts","\u002Fcontacts\u002Fcheck","Check numbers for WhatsApp registration","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contacts\u002F",{"availability":4,"ban_risk":5,"curl":30,"method":32,"operationId":33,"path":34,"summary":35,"tag":9,"url":36},{"code":31,"lang":23},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F+15551234567\u002Fexists' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'","GET","checkContactExists","\u002Fcontacts\u002F{id}\u002Fexists","Check one number for WhatsApp","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contact-exists\u002F",[38,41,44,47],{"a":39,"q":40},"Your plan sets an explicit daily allowance, and the API tells you how much is left through the usage endpoint. The harder limit is behavioural: even inside your allowance, checking a large list in a short burst is the pattern that draws attention, so spread it out.","How many numbers can I check per day?",{"a":42,"q":43},"Because a check involves no relationship at all. Sending a message to someone who wrote to you is normal behaviour; asking the network about thousands of numbers you have never contacted is what a scraper does. The abuse systems weight that difference heavily, and so does Wapito's metering.","Why is this riskier than sending a message?",{"a":45,"q":46},"No. It tells you whether an account exists and gives you the identity you would address, nothing more. Profile details are a separate call with their own privacy rules, and a contact who has restricted their profile will not reveal a name or a photo to a stranger's number.","Does a check tell me the person's name?",{"a":48,"q":49},"No. Every check runs through a real linked WhatsApp session, which is precisely why the operation carries ban risk - the question is asked by your number, and the network sees who is asking. Any service that claims otherwise is running someone else's number to do it.","Can I check a number without a linked phone?",[51,52],"A positive result means an account exists, not that the person will welcome a message. Validity is not consent, and treating a check result as a mailing list is how numbers get reported.","Results go stale in both directions: people join WhatsApp and people leave. Re-check on a slow schedule measured in months, never in a loop, and always store the date you checked.","Check Number",true,{"endpoints":56,"errors":61,"glossary":77,"hub":10,"integrations":87,"siblings":100,"tutorials":113,"vs_cloud_api":123},[57,59],{"title":58,"url":28},"POST \u002Fcontacts\u002Fcheck",{"title":60,"url":36},"GET \u002Fcontacts\u002F{id}\u002Fexists",[62,65,68,71,74],{"title":63,"url":64},"plan_required (402)","\u002Fdocs\u002Ferrors\u002Fplan-required\u002F",{"title":66,"url":67},"not_on_whatsapp (404)","\u002Fdocs\u002Ferrors\u002Fnot-on-whatsapp\u002F",{"title":69,"url":70},"quota_exceeded (429)","\u002Fdocs\u002Ferrors\u002Fquota-exceeded\u002F",{"title":72,"url":73},"invalid_recipient (400)","\u002Fdocs\u002Ferrors\u002Finvalid-recipient\u002F",{"title":75,"url":76},"payload_too_large (413)","\u002Fdocs\u002Ferrors\u002Fpayload-too-large\u002F",[78,81,84],{"title":79,"url":80},"JID","\u002Fglossary\u002Fjid\u002F",{"title":82,"url":83},"Cold send","\u002Fglossary\u002Fcold-send\u002F",{"title":85,"url":86},"Sandbox","\u002Fglossary\u002Fsandbox\u002F",[88,91,94,97],{"title":89,"url":90},"Check whether an Airtable record's number is on WhatsApp","\u002Fintegrations\u002Fairtable\u002Fcheck-number\u002F",{"title":92,"url":93},"n8n","\u002Fintegrations\u002Fn8n\u002F",{"title":95,"url":96},"Google Sheets","\u002Fintegrations\u002Fgoogle-sheets\u002F",{"title":98,"url":99},"Airtable","\u002Fintegrations\u002Fairtable\u002F",[101,104,107,110],{"title":102,"url":103},"LID to Phone","\u002Fwhatsapp-api\u002Flid-to-phone\u002F",{"title":105,"url":106},"Profile Picture","\u002Fwhatsapp-api\u002Fprofile-picture\u002F",{"title":108,"url":109},"Send Without Template","\u002Fwhatsapp-api\u002Fsend-message-without-template\u002F",{"title":111,"url":112},"Connect a Number","\u002Fwhatsapp-api\u002Fconnect-number-qr-pairing\u002F",[114,117,120],{"title":115,"url":116},"Python","\u002Fwhatsapp-api\u002Fcheck-number\u002Fpython\u002F",{"title":118,"url":119},"Node.js","\u002Fwhatsapp-api\u002Fcheck-number\u002Fnodejs\u002F",{"title":121,"url":122},"PHP","\u002Fwhatsapp-api\u002Fcheck-number\u002Fphp\u002F","\u002Fvs-cloud-api\u002Fcheck-number\u002F",[125,126,127,128],"whatsapp number checker api","check if number has whatsapp","bulk whatsapp number validation","whatsapp number verification api",{"breadcrumb":130,"canonical":140,"description":141,"h1":142,"lastmod":13,"title":143},[131,134,137,138],{"name":132,"url":133},"Home","\u002F",{"name":135,"url":136},"WhatsApp API","\u002Fwhatsapp-api\u002F",{"name":8,"url":10},{"name":53,"url":139},"\u002Fwhatsapp-api\u002Fcheck-number\u002F","https:\u002F\u002Fwapito.com\u002Fwhatsapp-api\u002Fcheck-number\u002F","Check whether a phone number is on WhatsApp. No templates, no Meta approval, any number. 2 endpoints, code in Python, Node.js and PHP.","Check if a Number is on WhatsApp","WhatsApp Number Checker API | Wapito","check-number","Normalise to international format, check in modest batches, and store every result with its date so you never check the same number twice.",[147,151,154],{"body":148,"operationId":33,"operation_url":36,"title":149,"webhook":150},"Convert to international format with a real phone-number library before you check anything. A number with a national trunk prefix left on is a different number, and checking it wastes an allowance and teaches you nothing.","Normalise the numbers first",null,{"body":152,"operationId":25,"operation_url":28,"title":153,"webhook":150},"Send a modest batch rather than one request per number. The response tells you, per number, whether an account exists and what identity it maps to, which is the part worth storing.","Check a batch",{"body":155,"operationId":156,"operation_url":157,"title":158,"webhook":150},"Write each answer back to your own database with the date you checked, then read the usage endpoint before the next batch. Re-checking numbers you already know about is the easiest way to burn an allowance and attract attention at the same time.","getUsage","\u002Fdocs\u002Fapi\u002Fchannel\u002Fget-usage\u002F","Store the result and watch the allowance","Check whether a phone number is on WhatsApp.","t1b",[162,165,168],{"body":163,"title":164},"A retailer checks its opted-in contacts once before a seasonal campaign, drops the numbers with no WhatsApp account, and sends only to the rest. The campaign spends nothing on unreachable numbers and the failure rate stays low enough not to look suspicious.","Clean a list before a campaign",{"body":166,"title":167},"A booking form checks the number as the customer types it, so someone who mistypes a digit is corrected before they leave the page. One check per signup is a tiny volume and it prevents a whole class of failed confirmations later.","Validate at the point of signup",{"body":169,"title":170},"A logistics system checks each recipient once and stores the answer, then sends delivery updates by WhatsApp to those who have it and by SMS to those who do not. The check is repeated only when a number changes.","Route notifications by channel",[],[173,175],{"label":58,"id":25,"lang":23,"code":22,"html":174},"\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\u002Fcontacts\u002Fcheck\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\"> '{\"phones\":[\"+15551234567\",\"+15559876543\",\"+15550000000\"]}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":60,"id":33,"lang":23,"code":31,"html":176},"\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>",1790464899260]