WhatsApp bot hosting
Host your WhatsApp bot on the official Cloud API
A Cloud API bot is a webhook. Meta posts every message to an https address you own, your code checks the signature and answers through the API. FadeHost gives it that address, keeps it always on and redeploys it on every push. Start from our template or point us at your own repository.
- Official Cloud API, nothing else
- Always-on https address
- Signature checked on every delivery
- Push to deploy, console, rollback
- Status
- Online
- Tier
- Starter · 1 GB · 1 vCPU
- Region
- Europe West
- Webhook fields
- messages
How it works with the Cloud API
Three moving parts, and two of them are Meta's. Your side is one small web service that has to be reachable and has to be quick.
Meta delivers the message
Your number lives on Meta's side. When somebody writes to it, Meta posts the message to the callback URL you gave it, which is your app's web address with /webhook on the end. The address has to be https with a valid certificate, which is what an app gets here.
Your bot checks the signature
Every delivery carries an X-Hub-Signature-256 header. The template recomputes it from your app secret and drops anything that does not match, then answers 200 before it does any work, so a slow reply never looks like a failed delivery.
The reply goes out through the API
The bot calls the Graph API with your access token and phone number ID, marks the message read and sends the answer. It lands on the sender's phone as an ordinary WhatsApp message.
What you need from Meta
- A Meta developer app of type Business with the WhatsApp product added.
- The phone number ID from WhatsApp, API Setup. The test number Meta gives you works while you build.
- An access token. The temporary one on that page expires after 24 hours, so a bot that runs longer wants a System User token with the whatsapp_business_messaging permission.
- The app secret from App settings, Basic.
- A verify token, which is any string you choose and paste in both places.
What you do not need
A phone kept online, a browser session, or an unofficial client. The Cloud API runs on Meta's side, and FadeHost hosts WhatsApp bots on the official platform only. What your bot needs from us is an https address with a real certificate, because Meta does not deliver to a self-signed one.
From the Meta app to the first reply
- 1
Set up the Meta side
Create the Business app at developers.facebook.com and add the WhatsApp product. Copy the phone number ID and an access token from WhatsApp, API Setup, and the app secret from App settings, Basic. Pick any string as your verify token.
- 2
Deploy the bot
In the panel choose Apps, Host something, then the WhatsApp bot template, or point us at your own repository. The values go in the environment table. The template asks for the web address at the same time, so it is live from the first boot.
- 3
Point Meta at the webhook
In the Meta dashboard under WhatsApp, Configuration, paste the callback URL, enter the same verify token, save, and subscribe to the messages field. Meta calls the address once to verify it, the console prints webhook verified, and the next message you send comes back answered.
The template is Express with the handshake, the signature check and the reply helpers already written, and the replies in one file you edit: read the source.
The values the template reads
They go in the environment table on the bot's page, one KEY=value per line, masked once saved. None of them belongs in the repository.
WHATSAPP_VERIFY_TOKEN=any-string-you-choose
WHATSAPP_APP_SECRET=from App settings, Basic
WHATSAPP_ACCESS_TOKEN=your System User token
WHATSAPP_PHONE_NUMBER_ID=your phone number ID
PORT=8080PORT is set for you and the template listens on it. WHATSAPP_API_BASE is optional and moves the bot to another Graph API base when you want to point it somewhere else for a test.
Paste this into Meta as the callback URL
Your own name in place of example-bot. The verify token in the field beside it is the same string as WHATSAPP_VERIFY_TOKEN.
What the runtime gives the bot
The panel around the app, not a bare container. All of it is on the bot's own page.
Push to deploy
Connect the FadeHost GitHub App once and every push to the branch reinstalls and restarts the bot. Private repositories work through the App or an access token.
Deploy history and rollback
Every deploy is listed with its commit. Roll back pins the bot to an older one and redeploys it, and pushes keep arriving in the history until you unpin.
Live console
Everything the bot prints lands on its page as it happens, from the install output to the webhook it logged a second ago.
Crash doctor
When the bot dies in a loop we read the logs and name the cause in plain words, usually within a minute: a missing variable, a rejected access token, a package that is not installed.
Environment variables
The verify token, the app secret, the access token and the phone number ID live in a table in the panel with their values masked. Save once and the bot restarts with them.
Nine runtimes, detected for you
Node.js, Python, Bun, Deno, Go, Java, PHP, Ruby and static sites. We read the repository, pick the runtime and install with the package manager your lockfile names. The template is Node.js and Express.
A build before the start
Each deploy installs, builds, then starts. A TypeScript bot whose dist folder is not committed builds on its own, workspaces build only the package that runs, and you can set your own build command.
Dockerfile and Railpack builds
A paid bot can build into an image instead of installing at start: your Dockerfile, or Railpack when there is none, built on our build box and started in seconds on every restart.
A web address with HTTPS
Pick a name and the bot answers at https://name.fadehost.app, certificate handled. That address plus /webhook is what you paste into Meta. Your code listens on the PORT variable and on 0.0.0.0.
Storage that survives a deploy
The checkout is reset to your repository on every push, so anything the bot has to keep goes under /data, which is a volume that stays put across deploys and restarts.
One-click MySQL
A paid bot includes a MySQL database at no extra cost, created with one click, with the connection details injected into the environment. PostgreSQL and Redis are managed databases on the same private network.
Scheduled commands
Run a command inside the bot's container on a cron schedule, up to ten per app: a nightly cleanup, a report, a cache warm-up. Each run keeps its exit code and its last lines of output.
Usage chart
CPU and memory over the last 24 hours, sampled every five minutes, on the bot's page. A bot sitting at its memory limit is obvious before it starts restarting.
Backups
A daily backup of everything under /data for $1 a month per app, stored off the node, kept seven days and restored in one click. Take one by hand before a risky change.
Three regions, one private network
Europe West (France), Canada East (Montreal) or USA West (Oregon). From there the bot reaches your databases and your game servers by name on your own private network.
Always on, locked down
Non-root, a read-only filesystem apart from its own storage, hard memory and CPU limits, and an automatic restart if the bot falls over. No sleep timer, nothing to renew.
Pricing
Per app, per month, on the same bill as your game servers and your other bots. Yearly is ten months for twelve.
A WhatsApp bot needs the always-on web address, so it starts at a paid tier. The free tier is 256 MB with an address that sleeps when nobody is using it and wakes on the next request: fine while you wire the webhook up, but the address is the one thing Meta is calling, and a sleeping one makes the first message after a quiet spell wait for the wake. Always on is $2 a month or $20 a year per app.
Starter $2/mo or $20/yr | Standard $3/mo or $30/yr | Pro $6/mo or $60/yr | |
|---|---|---|---|
| RAM | 1 GB | 2 GB | 4 GB |
| CPU | 1 vCPU | 1 vCPU | 3 vCPU |
| Disk under /data | 5 GB | 10 GB | 20 GB |
| Database | MySQL included | MySQL included | MySQL included |
| Always-on web address | +$2/mo or $20/yr | +$2/mo or $20/yr | +$2/mo or $20/yr |
| Daily backups, 7 days | +$1/mo | +$1/mo | +$1/mo |
| Image builds | Dockerfile, Railpack | Dockerfile, Railpack | Dockerfile, Railpack |
| Add Starter | Add Standard | Add Pro |
- Always on, no sleep timer, nothing to renew
- GitHub auto-deploy, live console, crash doctor
- Deploy history and rollback, scheduled commands, usage chart
- Environment variables, private network, three regions
What a typical setup costs
A bot answering one number
Starter plus the always-on address
$4/mo
1 GB and 1 vCPU, the webhook answering the moment Meta calls. $40 a year if you pay yearly.
A bot that remembers people
Standard plus the address and MySQL
$5/mo
2 GB and 10 GB of disk, with the MySQL database included on the tier at no extra cost. $50 a year.
Meta bills conversations on its own terms; FadeHost bills the hosting. If you already host a game server or a Discord bot, add this one to the same subscription in the plan builder. One account, one bill.
Frequently asked questions
- What do I need before I can deploy?
- A Meta developer account and an app of type Business with the WhatsApp product. From it you need the phone number ID (the test number Meta gives you works while you build), an access token and the app secret. You also choose a verify token, any string, and paste it in both the environment and the Meta dashboard. The temporary access token on the API Setup page expires after 24 hours, so a bot that runs longer wants a System User token with the whatsapp_business_messaging permission.
- Does this work with WhatsApp Business?
- The Cloud API is the API side of the WhatsApp Business Platform, so this is the WhatsApp Business route. It is not the WhatsApp Business phone app: nothing here runs on a handset. Your number is registered in the Meta app dashboard, Meta delivers its messages to your webhook, and the bot answers through the API.
- Do I need to keep a phone online?
- No. The Cloud API runs on Meta's side. There is no phone session and no browser to keep alive: your bot is a webhook receiver and an API client, and that is what FadeHost keeps running.
- What does Meta charge?
- Meta bills conversations on its own terms; FadeHost bills the hosting. What you pay here is the tier plus the always-on address, which is $4 a month on Starter.
- Can I run a bot that signs in to a personal WhatsApp number?
- No. FadeHost hosts WhatsApp bots on the official WhatsApp Business Platform, the route WhatsApp supports. Anything that drives a personal number through an unofficial client is against WhatsApp's terms and gets numbers banned, and it is not hosted here.
- Do I need business verification?
- That sits on Meta's side of the line. Which numbers you can register, what you have to verify and how many people you may message are decided in the Meta app dashboard, not here, and the test number in that dashboard is there to build against. FadeHost hosts the webhook either way.
- Is the free tier enough?
- For building, yes. The free app is 256 MB with an address that sleeps when nobody is using it and wakes on the next request, which is fine while you are wiring the webhook up. A bot people actually message wants the always-on address on a paid tier: $2 a month or $20 a year on top of the tier, so $4 a month with Starter.
- Which languages work?
- Node.js, Python, Bun, Deno, Go, Java, PHP, Ruby and static sites. The Cloud API is plain HTTPS, so the language is your choice; our template is Node.js and Express. We read the repository to pick the runtime and install with the package manager your lockfile names.
- Can I deploy my own repository instead of the template?
- Yes, public or private. Install the FadeHost GitHub App and pick the repository, or paste the URL and an access token. Every push to the branch redeploys the bot, and the deploy history lets you roll back to an earlier commit.
- Can the bot use a database?
- Yes. A paid bot includes a MySQL database at no extra cost: one click creates it and the connection details land in the environment. PostgreSQL and Redis are available as managed databases on the same private network. Files the bot writes under /data survive deploys too; everything beside your code is reset to the repository on every push.
- What happens when the bot crashes, or a push breaks it?
- It restarts on its own, and the crash doctor reads the logs and names the cause, usually within a minute: a missing variable, a rejected access token, a package that is not installed. If a push is the problem, open the deploy history, roll back to the last commit that worked, and unpin once the fix is in.
- Where does the bot run?
- Europe West (France), Canada East (Montreal) or USA West (Oregon). Pick the region closest to the people who message it and to the databases or game servers it talks to.
- What is not allowed?
- Phishing and credential pages, proxies and tunnels, adult or illegal content, bulk file or media delivery through the address, raw TCP or UDP services, outbound mail and workloads that need privileged containers or a GPU. The full rules are in the terms.
Read on
App hosting
The same runtime behind this page, for web apps, APIs, workers and static sites.
Telegram bot hosting
The other messaging template: polling or webhooks behind the same address.
Discord bot hosting
Bots from GitHub, plus nine ready-made ones that need no code.
App hosting documentation
The PORT contract, build modes, the web address, storage, schedules, backups and the limits per tier.
The template on GitHub
Express, the verification handshake, the signature check and the reply helpers. MIT licensed, maintained by us.