[{"data":1,"prerenderedAt":133},["ShallowReactive",2],{"pseo:platforms:airtable:check-number":3},{"ban_risk":4,"faqs":5,"feature":15,"goal":19,"platform":20,"prerequisites":27,"related":31,"seo":55,"steps":71,"test":109,"tier":110,"troubleshooting":111,"updated":69,"url":65,"verified":132},"high",[6,9,12],{"a":7,"q":8},"Yes: the batch endpoint accepts up to fifty numbers in one POST and returns one result per number. It is the right shape for a scheduled automation over a view rather than a per-record trigger, because one fetch replaces fifty. Airtable's script action limits how many fetch calls a single run may make, so for a large base the batch endpoint is the difference between finishing and timing out.","Can the script check many numbers in one call?",{"a":10,"q":11},"It means an account exists for that number, nothing more. The person has not asked to hear from you, and a first message from a number they do not know is a reach-out that WhatsApp watches closely. Use the check to avoid sending to dead numbers and to pick the right channel, not as consent, and keep the actual first message for people who opted in.","Does a positive check mean I can message the person?",{"a":13,"q":14},"Number checks are the most bannable thing an unofficial API does, so Wapito meters them per channel and the Sandbox plan allows only a small daily number of them; a Premium channel is required for more. The exact allowances are on the pricing page rather than here, so this recipe does not go out of date when they change. When the allowance is used up the call returns quota_exceeded and the record is marked Error, not lost.","Why does the check count against my plan, and how much does it cost?",{"name":16,"slug":17,"url":18},"Check Number","check-number","\u002Fwhatsapp-api\u002Fcheck-number\u002F","Check whether each new Airtable record's phone number is on WhatsApp before anyone messages it, and write the answer back on the record. An automation triggers when a record enters a view, a Run a script action calls the Wapito exists endpoint, and the result plus the date are stored so the same number is never checked twice.",{"http_module":21,"name":24,"slug":25,"url":26},{"docs_url":22,"name":23},"https:\u002F\u002Fsupport.airtable.com\u002Fdocs\u002Frun-a-script-action","Run a script automation action (fetch)","Airtable","airtable","\u002Fintegrations\u002Fairtable\u002F",[28,29,30],"An Airtable base with a table that has a Phone field, a single-select field for the WhatsApp status and a date field for when it was checked.","A view named Needs check whose filter is: Phone is not empty and WhatsApp status is empty.","A connected Wapito channel and its channel token, stored in a Settings table or a secret field the script can read.",{"errors":32,"operations":48,"pillar":18,"platform":26},[33,36,39,42,45],{"title":34,"url":35},"plan_required (402)","\u002Fdocs\u002Ferrors\u002Fplan-required\u002F",{"title":37,"url":38},"not_on_whatsapp (404)","\u002Fdocs\u002Ferrors\u002Fnot-on-whatsapp\u002F",{"title":40,"url":41},"quota_exceeded (429)","\u002Fdocs\u002Ferrors\u002Fquota-exceeded\u002F",{"title":43,"url":44},"invalid_recipient (400)","\u002Fdocs\u002Ferrors\u002Finvalid-recipient\u002F",{"title":46,"url":47},"payload_too_large (413)","\u002Fdocs\u002Ferrors\u002Fpayload-too-large\u002F",[49,52],{"title":50,"url":51},"POST \u002Fcontacts\u002Fcheck","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contacts\u002F",{"title":53,"url":54},"GET \u002Fcontacts\u002F{id}\u002Fexists","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fcheck-contact-exists\u002F",{"breadcrumb":56,"canonical":66,"description":67,"h1":68,"lastmod":69,"title":70},[57,60,63,64],{"name":58,"url":59},"Home","\u002F",{"name":61,"url":62},"Integrations","\u002Fintegrations\u002F",{"name":24,"url":26},{"name":16,"url":65},"\u002Fintegrations\u002Fairtable\u002Fcheck-number\u002F","https:\u002F\u002Fwapito.com\u002Fintegrations\u002Fairtable\u002Fcheck-number\u002F","Check whether each new Airtable record's phone number is on WhatsApp before anyone messages it, and write the answer back on the record.","Check whether an Airtable record's number is on WhatsApp","2026-09-16","Check WhatsApp Numbers from Airtable (No Code) | Wapito",[72,78,85,91,98,104],{"body":73,"field_map":74,"title":77},"Add a view called Needs check filtered to records whose Phone field is filled and whose WhatsApp status is still empty. The automation triggers on a record entering this view, and because the script writes a status back, every processed record leaves the view on its own. That one filter is the whole idempotency story: a re-run cannot re-check a number that already has an answer.",{"Phone":75,"WhatsApp status":76},"Trigger record field — international format, for example +15551234567","Single select: On WhatsApp, Not on WhatsApp, Error — empty means not checked yet","Create the view that acts as the queue",{"body":79,"field_map":80,"title":84},"Create an automation whose trigger is When a record enters a view, pick the Needs check view, and add a Run a script action. Declare three input variables in the script's left panel: recordId from the trigger record, phone from the Phone field, and token from your Settings table's single record. Passing the token as an input keeps it out of the script text, which teammates can read.",{"phone":81,"recordId":82,"token":83},"Input variable — trigger record's Phone field","Input variable — trigger record's Airtable record ID","Input variable — the Token field of the Settings table's only record","Add the automation with a Run a script action",{"body":86,"field_map":87,"title":90},"In the script read input.config(), URL-encode the phone and call fetch on https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F followed by the encoded number and \u002Fexists, with an Authorization header of Bearer plus the token. It is a GET with no body. Read response.status before parsing: a 200 carries the answer, a 404 with the code not_on_whatsapp is also an answer, and anything else is an error to record.",{"Authorization":88,"{id}":89},"'Bearer ' + token","encodeURIComponent(phone) — the path segment of GET \u002Fcontacts\u002F{id}\u002Fexists","Call the exists endpoint with fetch",{"body":92,"field_map":93,"title":97},"Parse the JSON body. When exists is true, the result also carries the jid and, when WhatsApp exposes one, the lid, which are worth keeping because they are the identifiers a later send returns. When the code is not_on_whatsapp the answer is simply no. Any other status is an Error outcome, and the error code from the body is the note to store so a human can see why.",{"Check note":94,"WhatsApp JID":95,"WhatsApp status":96},"body.error.code on an error","body.jid — for example 15551234567@s.whatsapp.net","exists === true → On WhatsApp; not_on_whatsapp → Not on WhatsApp; anything else → Error","Turn the response into the three outcomes",{"body":99,"field_map":100,"title":103},"Finish the script with table.updateRecordAsync(recordId, fields), setting the status, the JID, the note and Checked at to today. Airtable's single-select field accepts the option name as a string in a script, so the three outcome names have to match the options exactly. The update is what removes the record from the queue view, so if the update fails the record will be checked again on the next trigger, which is the safe direction.",{"Checked at":101,"WhatsApp status":102},"new Date() — the date field on the record","{ name: 'On WhatsApp' } — the option as a string or name object","Write the result and the date back on the record",{"body":105,"field_map":106,"title":108},"A new record checks one number, which is fine at the rate records normally arrive; if you import a thousand contacts at once, the automation queues a thousand checks and Wapito's per-channel pacing will spread them out, but the number checking them is still doing something no person does. Import in batches over days. For re-checks, a second automation on a view where Checked at is older than a few months does the same job.",{"Re-check view":107},"Filter: Checked at is before N months ago — clears WhatsApp status to re-enter the queue","Keep the pace human and re-check on a slow schedule","Add a record with your own phone number and watch the automation run from the Runs tab. The script output should show a 200 with exists true, the record should leave the Needs check view, and its WhatsApp status, JID and Checked at fields should be filled. Add a second record with a number you know is not on WhatsApp and confirm it gets Not on WhatsApp rather than Error.","t3b",[112,116,120,124,128],{"code":113,"http_status":114,"title":115,"url":38},"not_on_whatsapp",404,"Number is not on WhatsApp",{"code":117,"http_status":118,"title":119,"url":44},"invalid_recipient",400,"Recipient is not valid",{"code":121,"http_status":122,"title":123,"url":35},"plan_required",402,"Premium channel required",{"code":125,"http_status":126,"title":127,"url":41},"quota_exceeded",429,"Plan quota exhausted",{"code":129,"http_status":126,"title":130,"url":131},"rate_limited","Too many requests","\u002Fdocs\u002Ferrors\u002Frate-limited\u002F",false,1790464904307]