Help centre

Stuck somewhere? Here is the answer, step by step

How to use every product, from sign-up to a live website, plus fixes for the problems people hit most. Written for people who have never built a website.

Getting started

Sign up, sign in, get to know the Console, and invite your team to help.

Sign up and sign in

Sign up with your email in under a minute. No credit card needed, and you can start on the Free plan right away.

  1. Open the sign-up page.
  2. Enter your Contact name, Email and a Password of at least 8 characters, then type the password again.
  3. Tick the box to accept the terms of use, then click Create account and start designing.
  4. You go straight into the Console, with your first project and the Free plan ready.

Next time, go to the sign-in page and use the same email and password. You stay signed in for 7 days.

Use an email address you actually read. Your teammates will invite you to projects using this email.

If something goes wrong

It says “ไม่สามารถสมัครด้วยอีเมลนี้ได้” (This email can’t be used to sign up)

This email already has an account. Go to the sign-in page instead, or sign up with a different email.

It says “อีเมลหรือรหัสผ่านไม่ถูกต้อง” (Incorrect email or password)

Check that the email is typed correctly, and that the Thai keyboard or Caps Lock wasn’t left on while typing your password.

It says “ลองใหม่ภายหลัง” (Try again later)

There were too many sign-in or sign-up attempts in a short time. Wait about 1 minute and try again.

I forgot my password

The sign-in page doesn’t have a self-service password reset yet. If you’re still signed in on another device, open a ticket in the User account category from that device. If not, contact our team with the email you signed up with.

It says “บัญชีนี้ถูกระงับการใช้งานโดยทีมงาน” (This account has been suspended by our team)

Our team has put your account on hold. Read the reason shown after the message, then contact us from the Support & refunds menu, which still works while the account is on hold.

It says “Sign-ups are paused”

We’re not taking new sign-ups for a while. Please come back and sign up later.

Back to top ↑

Get to know the Console

Every service is in the menu on the left, in three groups: Project, cloud services, and account and usage.

MenuWhat it’s for
WebsitesBuild and edit websites with drag and drop, connect domains, set up SEO and turn on Business Apps
Static WebDeploy websites from a Git repo (for people who write code)
ContainersRun apps from a Docker image
Managed DatabasesPostgreSQL, MySQL, MariaDB and Redis databases
WordPressWordPress, installed and ready to use
Managed Email ServerEmail on your own domain name
VPCYour project’s private network and NAT Gateway
Quotas & usageSee how much of your quota you’ve used and what’s left
Plans & walletTop up, change plans and see your charge history
Support & refundsOpen a ticket to our team and request refunds

The top-right corner (your profile picture) is the account menu. There you can see your plan and next billing date, copy your Account ID, change the language, set your wallet currency and sign out.

When you contact our team about your account or billing, include your Account ID from the account menu. It helps us find your account faster.

Back to top ↑

Change the Console language

You can use Thai, English or Lao. Thai is the default.

  1. Click your profile picture in the top-right corner.
  2. Choose ไทย, English or ລາວ.

Your language is saved with your account, so it stays the same on any device. The sign-in page also has a language button.

Changing the language doesn’t change the currency. To see amounts in baht, dollars or kip, set it in Billing wallet settings (see Top up your wallet).

If something goes wrong

I switched to English or Lao, but some alerts are still in Thai

Some error messages from the system are still only in Thai. We’re translating them bit by bit. You’ll find what they mean in the troubleshooting sections of this guide.

Back to top ↑

Projects and inviting your team

A project is a box that keeps your websites and services together. Invite people to a project and give them one of 5 access levels.

Create a new project

  1. Click the project picker at the top of the left menu, or the All projects menu.
  2. Click Create project, give it a name, then confirm.

Number of projects you can create: Free 2 · Starter 5 · Business 20

Invite members

  1. Go to Members & permissions (IAM) and click Invite members.
  2. Enter email addresses (separate several with commas or new lines) and choose a role.
  3. Click Send invitation, then click Copy link.
  4. Send the link to your teammate yourself, by LINE or email. They must sign in with the invited email, then click Accept invitation.

We don’t send invitation emails for you. The invite link is shown only once for copying and works for 7 days. If you lose it, click New link (the old link stops working right away).

Access levels

RoleWhat they can do
OwnerEverything, including deleting the project
AdminCreate, edit and delete services, manage members and rename the project
EditorCreate, edit and deploy services
OperatorStart, stop and restart services
ViewerView services, status and logs only

Delete a project

In Members & permissions (IAM), on the Settings tab, type the project name exactly, then click Delete permanently. You must delete all websites and services in the project first.

If something goes wrong

A member opens the link and sees “คำเชิญนี้ส่งถึงอีเมลอื่น” (This invitation was sent to a different email)

They’re signed in with a different account. Ask them to click Switch account and sign in with the email you invited.

It says “คำเชิญไม่ถูกต้องหรือหมดอายุ” (The invitation is invalid or has expired)

The link is more than 7 days old, or someone has already clicked New link. Ask the project owner to click New link and send it again.

I can’t create a project; it says I’ve reached the maximum number of projects

You’ve reached your plan’s limit. Delete a project you don’t use, or upgrade your plan.

I can’t delete a project

Your primary project can’t be deleted because it holds your wallet and plan. For any other project, first delete all the websites, services and NAT Gateway inside it.

Back to top ↑

Plans and wallet

Top up, choose a plan, know when you’re charged, and what to do when your balance runs low.

Top up your wallet

Every service is paid from one wallet. The balance is kept in US dollars, but you can view it and top up in baht, dollars or kip.

Choose the currency you see

Click your profile picture, then choose Billing wallet settings. Pick THB, USD or LAK. Changing the currency doesn’t change your balance.

How to top up

  1. Go to Plans & wallet.
  2. Click Top up, then choose one of the set amounts or click Other amount.
  3. Choose one of the available payment methods and follow the steps on screen.
Details
Minimum amountUS$5 per top-up (before VAT), shown in your currency
VATCharged once, when you top up: baht and dollars 7% · kip 10%
How long your balance lastsIt never expires

Payment methods marked Coming soon can’t be used yet. If the button says Payments not open yet, you can’t top up by yourself at the moment. Open a ticket in the Billing and plans category and our team will help.

See your history

The Wallet & history tab shows every movement in your wallet, your top-up and order history, and your monthly usage charges.

If something goes wrong

I topped up but my balance hasn’t changed

Check the status under Top-ups and orders. If it still says Awaiting payment, our team hasn’t finished checking your payment yet. If it takes unusually long, open a ticket and attach your proof of transfer.

The balance I see changed when I changed currency

Your real balance is kept in dollars. The baht or kip figure is a conversion at the exchange rate, to make it easy to read. The value in your wallet hasn’t changed.

Back to top ↑

Website plans: sign up, upgrade and downgrade

Free never expires. Upgrade to Starter or Business any time from the Websites tab on the Plans & wallet page.

FreeStarterBusiness
Websites11 (buy up to 3 more)4 (buy as many more as you like)
Pages per website1030100
Your own domain
Projects2520

Sign up or upgrade

  1. Top up your wallet with enough to cover the plan price.
  2. Go to Plans & wallet, on the Websites tab.
  3. Click the button for the plan you want. You’ll see the amount to be charged before you confirm.
  • Your first month is charged only for the days left in that month.
  • Upgrading from Starter to Business takes effect right away. You pay only the difference for the days left.
  • Downgrading from Business to Starter takes effect at the end of the month. Click Cancel plan change if you change your mind.
  • Your plan renews by charging your wallet on the last day of every month at 23:59 (Thailand time).

Enterprise customers change plans or add websites through their contract with our sales team, not on this page.

If something goes wrong

It says “ยอดเงินใน Wallet ไม่พอสำหรับค่าบริการ Package” (Your wallet balance isn’t enough for the plan)

Top up to at least the amount shown, then sign up again.

I can’t downgrade to Starter

Starter allows 1 website (up to 4 including extra websites you buy). First delete websites you don’t use until you’re within that number.

I can’t find a button to go back to Free

For now, you can’t downgrade from Starter or Business back to Free. If you want to stop your paid plan, open a ticket in the Billing and plans category.

It says “กรุณาเติมเงินเพื่อชำระค่าบริการรอบปัจจุบันก่อนอัปเกรดแพ็กเกจ” (Please top up to pay for the current period before upgrading your plan)

Your account is in its grace period because there wasn’t enough money to renew. Top up so the current period can be charged first, then you can upgrade.

Back to top ↑

Not enough money in your wallet: grace period and paused services

Your website doesn’t disappear straight away. You get time to top up, and all your data is kept.

Website plans

  1. At the end of the month, if there isn’t enough money to renew, nothing is charged yet and a banner tells you that you have 5 days to top up. Your website stays online as normal during this time.
  2. After 5 days, if there’s enough for the plan but not for the extra websites you bought, the most recently bought extra website is paused first (it shows an On hold label).
  3. If there isn’t even enough for the plan, your account is suspended. Your websites go offline and can’t be published, but your designs and data are kept.
  4. As soon as you top up, what you owe is charged automatically and your websites come back online.

Usage-based services (Container, Database, WordPress, Mail, NAT)

These services are charged every few minutes. If your balance runs out, you get a 72-hour grace period, then the service is stopped. If the bill stays unpaid for 30 days, the data is permanently deleted.

Databases, WordPress and Mail hold important data. Don’t leave them unpaid for long. Set yourself a reminder to top up before the end of the month.

To create a new service, you need a minimum balance in your wallet: Database $3.49 · WordPress $5.99 · Mail $2.99 · Container more than $0

If something goes wrong

It says “แพ็กเกจถูกพักชั่วคราว ยอดเงินใน Wallet ไม่พอชำระค่าบริการ” (Your plan is paused; your wallet balance isn’t enough to pay)

Top up enough to cover what you owe. The charge is taken and your account is reopened automatically.

I can’t create a new service because my balance is too low

Your balance is below the minimum for that service. Top up and try again.

Back to top ↑

See your quotas and charges

Know how much you’ve used, what’s left, and what you’ve been charged for.

  • Quotas & usage: number of websites, pages, publishes and resources used, compared with your plan’s quota.
  • Plans & wallet, Wallet & history tab: every amount added and charged.
  • Cloud service usage is grouped as a usage charges item for each month.

Want to know the price before you start? Use the pricing calculator. It uses the same unit prices we actually charge.

Using AI to build your website is charged to your wallet for what you actually use. Editing your website yourself with drag and drop has no AI charge.

Back to top ↑

Request a refund

Get money back into your wallet if you were charged by mistake, or back to your bank account for top-ups you haven’t used.

  1. Go to Support & refunds and click Request a refund.
  2. Choose Refund to wallet (charged by mistake) or Refund to bank account (unused top-ups, including VAT).
  3. Choose the item, explain the reason in at least 10 characters, then send.

A ticket is opened for you automatically, and our team replies there. You can request a refund within 30 days, and have up to 5 requests waiting at the same time.

Back to top ↑

Build a website (drag and drop)

From choosing a template, editing pages, using AI and publishing, to connecting your domain and setting up SEO.

Create a new website

Pick a template or start from a blank page, give it a name, and you can start editing right away.

  1. Go to the Websites menu and click Create website.
  2. Choose a template: search or filter by category. You can click Preview first, then click Use this template, or choose Blank page.
  3. Click Next: name your website and enter a Website name (you can change it later).
  4. Set the URL (slug, English letters): lowercase letters, numbers and hyphens, 3–41 characters. You’ll see a preview of the web address first.
  5. Choose a region, then click Create website and open the editor.

Your website gets a free address like https://your-url.sites.region.thailandhosting.com. It keeps working even after you connect your own domain.

The URL and region can’t be changed later. If you want your real shop name as your web address, connect your own domain (see Connect your own domain).

Number of websites you can have (including Static Web): Free 1 · Starter 1 · Business 4. Buy more websites in Plans & wallet.

If something goes wrong

It says the URL is taken and set a different name

Someone already uses that URL, so 8 random characters were added to the end. If you don’t like it, delete this website and create a new one with a different URL (do this before you do lots of editing).

It says “ถึงจำนวนเว็บไซต์สูงสุดแล้ว” (You’ve reached the maximum number of websites)

You’ve reached your plan’s number of websites (including Static Web). Delete a website you don’t use, buy an extra website, or upgrade your plan.

The create website button is disabled and says “Top up to enable”

Your account is suspended because there wasn’t enough money to renew your plan. Top up and the button will work again.

Back to top ↑

Edit your pages: text, images, blocks and pages

Click anything to edit it, drag blocks into place, and check how it looks on both computers and phones.

On the website card, click Edit site. The menu on the left has Add, Components, Templates, AI design, Media, Pages and Settings.

Edit text and images

  • Double-click text to type over it. The panel on the right has Design for colour, size and spacing, and Layers for picking parts that sit on top of each other.
  • Select an image and replace it from the Media library: upload your own file, or use the stock photos and videos provided.
  • Set a link on a button or text in Link settings. Choose a page on your site, a spot on the page, or an outside URL, and choose whether it opens in a new window.

Add blocks and change the theme

  • Add tab: drag layout, text, button, image and video, and form blocks onto the page, or click to insert after the selected part.
  • Components tab > Page theme: change the colours and fonts of every part in one click.
  • Templates tab: use a different template in place of the current page (you’ll be asked to confirm first).
  • Switch between Desktop / Mobile in the top bar to see the phone view, and click Preview to see it the way your customers do.

Manage pages

Pages tab: Add page, Duplicate page, change a page’s address, or delete it. Use Sync this page’s Navbar & Footer to all pages so the top and bottom of your site match on every page. Pages per website: Free 10 · Starter 30 · Business 100

Save

Your draft is saved automatically every 15 seconds, and you can click Save yourself. Saving doesn’t put it on your live site. You must click Publish before customers can see it.

Contact form

Drag a Contact form block onto the page. Messages from customers are in your website settings under Form messages, where you can search them, export a CSV and reply by email. Each account can receive 100 messages a month.

Code mode (for people who write code)

Switch to Advance code in the top bar to edit HTML, CSS and JavaScript directly, with previews at computer, tablet and phone sizes. Press Ctrl+S to save.

If something goes wrong

It says “You’ve reached your plan’s page quota”

Delete or merge pages you don’t need, or upgrade your plan for more pages.

I can’t upload an image

Files must be JPEG, PNG, WebP, GIF, PDF, MP4 or WebM, and no larger than 10 MB each. If you see storage_exhausted, your plan’s file storage is full. Delete files you don’t use, or upgrade your plan.

I can’t delete an image from the media library; it says “ไฟล์ยังถูกใช้ในฉบับร่าง” (The file is still used in a draft)

The image is still on a page, or in a saved version. Remove the image from the page first.

It says “มีการแก้ไขใหม่ กรุณาโหลดเว็บไซต์อีกครั้ง” (There are newer changes; please reload the website)

Someone is editing the same website from another device or tab. Refresh the page to load the latest version, then carry on editing. Try not to edit from several places at once.

I can’t change the theme; it says this page has no Components yet

Themes apply to parts that come from the components library or a template. Add a component or template to the page first, then change the theme again.

Embed code from another site (script, iframe) disappeared in code mode

For safety, <script>, <iframe> and other embed tags are removed from the HTML. Write your JavaScript in the JavaScript tab instead.

Visitors see “ขณะนี้ยังรับข้อความไม่ได้” (We can’t accept messages right now) when sending the form

This month’s form quota of 100 messages is used up. It starts again next month. In the meantime, put your phone number or LINE on your website too.

Back to top ↑

Let AI help design and write your content

Let AI draft a whole page, a whole website, or just the part you select. You always see the result before deciding to use it.

  1. In the editor, open the AI design tab, or select a part of the page and click Use AI on the selected part.
  2. Choose a task, such as Design the whole page, Create a multi-page website, Add a Section or Rewrite text.
  3. Describe what your business does, fill in Business info and choose a Style, then click Send to AI.
  4. Check the result in Review AI result, which also shows the actual cost, then choose Apply, Generate again or Discard this result.

AI is charged to your wallet for what you actually use. When a task starts, the most it could cost is set aside. When it finishes, only the actual cost is charged and the rest is returned. You’ll see it in your wallet as AI usage.

Describe it clearly, for example “Home-roasted coffee shop in Ari, also sells beans online, warm cream colours”. That gets closer to what you want than a few short words. And if you’d rather not use AI, you can still build a complete website.

If something goes wrong

It says “ยอดเงินใน Wallet ไม่เพียงพอ งานนี้ต้องกันไว้สูงสุด …” (Your wallet balance isn’t enough; this task needs up to … set aside)

Top up more than the amount to be set aside. Whatever isn’t used goes back to your wallet when the task finishes.

It says “มีงาน AI กำลังดำเนินการอยู่” (An AI task is already running)

You can run one task at a time per account. Wait for the previous task to finish before starting a new one.

AI took so long it says it timed out

The task may still be running. Wait a moment and check again before sending it again, so you don’t pay twice.

AI gave me fewer pages than I asked for

The number of pages is capped at your plan’s quota.

It says the page changed while waiting for AI

The page was edited while AI was working. Close this result and send the request again.

Back to top ↑

Publish your website and go back to an earlier version

Click Publish once and your website is live right away. Every publish is saved as a version you can go back to.

  1. When you’ve finished editing, click Publish in the top-right corner.
  2. Your site is saved, published, and opened live in a new tab for you to check.
PlanPublishes per monthPer day
Free305
Starter4010
Business12030

Once you’re over the quota you can still publish, for US$0.03 each from your wallet. Publishing again without any changes doesn’t count toward your quota.

Go back to an earlier version

  1. On the website card, click Settings, then open the Versions tab.
  2. In Version history, choose the version you want, click Roll back, then Confirm and go live.

Going back to a version doesn’t count toward your publish quota. You can also download your website files as a ZIP from Export on the same tab.

If something goes wrong

I made changes but customers still see the old website

Check that you clicked Publish, not just save. Then refresh the page (on a phone, try closing and reopening the browser).

Visitors see “เว็บไซต์ยังไม่ได้เผยแพร่” (This website hasn’t been published yet)

This website has never been published. Open the editor and click Publish.

It says “ต้องมีหน้าแรก index” (An index home page is required)

Your home page was deleted or renamed. Create a page with the address index as your home page.

It says “Site นี้ถูกพักเพราะ Site เพิ่มไม่ได้ต่ออายุ” (This site is on hold because the extra site wasn’t renewed)

This is an extra website you bought, and it couldn’t be renewed (it shows an On hold label). Top up and buy the extra website again, or delete another website to free up a spot.

It says “แพ็กเกจถูกพักชั่วคราว” (Your plan is paused)

See Not enough money in your wallet. Top up, then publish again.

Back to top ↑

Connect your own domain

Have your website open at your shop’s name, like www.yourshop.com. Available on Starter and above. HTTPS is set up automatically.

  1. On the website card, click Settings, then open the Domains tab.
  2. Type your domain, such as www.example.com, and click Add domain. The status will be Awaiting DNS verification.
  3. Sign in to where you bought your domain (or your DNS provider) and add the 2 records shown on screen.
  4. Come back and click Check DNS. When it works, it says Domain verified.
TypeName (Host)ValueWhat it’s for
CNAMEYour domain, such as wwwYour website’s free address your-url.sites.region.thailandhosting.comPoints your domain to your website
TXT_thailandhosting (or _thailandhosting.www)The code shown on screenProves you own the domain

If your provider’s name field adds the domain name for you, enter only _thailandhosting or _thailandhosting.www. Don’t type the domain name again.

We recommend using www. Many providers don’t allow a CNAME on the main domain (without www). If you want to use the main domain, use an ALIAS / ANAME / CNAME flattening record instead.

HTTPS

Once your domain is verified, the HTTPS certificate is issued automatically the first time someone opens your website over HTTPS. You don’t need to do anything else. A verified domain also becomes your website’s main address for Google.

If something goes wrong

It says “ยังไม่พบ TXT record” (TXT record not found yet)

DNS can take from several minutes to several hours to take effect. Wait, then check again. If it still fails, check that the domain wasn’t added twice to the record name, such as _thailandhosting.example.com.example.com.

It says “TXT record ไม่ตรงกับ token” (The TXT record doesn’t match the token)

Copy the whole code from the screen again. Watch out for extra spaces or quotation marks, and delete old TXT records you don’t use.

It’s verified, but my domain doesn’t open my website

Verification only checks the TXT record. Check that the CNAME points to your website’s free address correctly, and that no old A record for the same domain is left over.

When I open it with https, the browser warns it’s not secure

The certificate is issued after the website is first opened. Wait a moment and try again. If you use Cloudflare, set this record to DNS only (grey cloud), at least until HTTPS works, because we need to reach your domain over HTTP to issue the certificate. If it takes more than 1 hour, open a ticket.

It says “โดเมนนี้ยืนยันกับเว็บไซต์อื่นแล้ว” (This domain is already verified on another website) or “โดเมนถูกใช้แล้ว” (This domain is already in use)

This domain is connected to another website. Remove it from that website first. If it isn’t your website, open a ticket.

It says “Custom domain สำหรับ Paid plan” (Custom domains are for paid plans)

The Free plan can only use the free address. Upgrade to Starter or Business to connect a domain.

I can’t enter a Thai-language domain

Convert the domain to Punycode (starting with xn--) before entering it. Most domain sellers show it in this form for you.

Back to top ↑

SEO: help Google and AI find you

Set the title, description and image shown when people share your link, for the whole website and for each page.

On the website card, click Settings, then open the SEO tab. Once saved, changes apply to your published website right away. You don’t need to publish again.

SectionWhat it’s forPlan
Site languageTells Google whether your website is in Thai, English or LaoAll plans
Google search resultsTitle (up to 60 characters) and description (70–160 characters), with a search result previewStarter, Business
Social sharingThe image shown when a link is shared (1200×630) and the site iconStarter, Business
Page SEOSeparate title, description and image for each page, and Hide this page from GoogleStarter, Business
Submit to Google and BingYour sitemap address, and fields for Search Console / Bing verification codesStarter, Business
AI searchHelps ChatGPT and other AI understand your business, with a Business profile form (type, phone number, address, opening hours, social media)Business

Websites on the Free plan have a small “Powered by ThailandHosting” badge in the bottom-right corner. When you upgrade, the badge disappears on its own without publishing again.

  1. Connect your own domain first (Google will use it as your main address).
  2. Write a title and description that include your shop name, type of business and area, such as “Home-roasted coffee shop, Ari”.
  3. Sign up for Google Search Console, enter the verification code in the SEO tab, then submit /sitemap.xml.

If something goes wrong

My website doesn’t show up in Google yet

A new website can take days or weeks before Google picks it up. Submitting your sitemap through Google Search Console helps speed this up. Also check that Hide this page from Google isn’t turned on.

It says “รหัสยืนยัน Google Search Console ไม่ถูกต้อง” (The Google Search Console verification code is invalid)

Enter only the code inside content="…" of the meta tag Google gives you. Don’t paste the whole tag.

It says “ลิงก์รูปต้องขึ้นต้นด้วย https://” (Image links must start with https://)

Choose an image from the media library instead of pasting a link, or use a link that starts with https://.

I shared the link on Facebook or LINE and the image didn’t change

These apps remember the old image for a while. Use Facebook’s Sharing Debugger tool to fetch the new details, or wait a bit.

Back to top ↑

Delete a website

Deleting is permanent. The website goes offline on every domain, and all pages, versions and files are deleted.

  1. On the website card, click the bin icon (or Settings > General tab > Delete site).
  2. Type the website’s URL exactly, then click Delete permanently.

This can’t be undone. If you might need it again, download a ZIP from the Versions tab > Export and keep it first.

If something goes wrong

I can’t delete it; it says “มีงานกำลังทำงาน” (A task is running)

A publish or another task for this website is still in progress. Wait for it to finish, then try again.

Back to top ↑

Business Apps: food ordering, online shop and bookings

Let your website take orders, sell products and take bookings on its own. Customers pay straight into your shop’s account, with no commission.

Turn Business Apps on and off

Turn it on one website at a time. Available on Starter and Business, for websites made with the drag-and-drop builder.

  1. Go to Websites, choose a website and click Settings (or Website settings from the editor).
  2. Open the Shop / Orders / Booking tab and click Turn on Business Apps.
  3. Check the amount and click Confirm. Your wallet is charged for the days left in the month (if it’s included in your plan, it says Confirm (included)).
  4. Wait 1–2 minutes while we are Preparing the shop database. When it’s done, all the sub-tabs are ready to use.
StarterBusiness
PriceUS$8.90 per website per month1 website free, then US$8.90 each
Orders per month5005,000
Online bookings per month3003,000
Menu items / products60500
Services / rooms10100
Staff accounts320
Kitchen display, CSV downloads, Airbnb / Booking.com calendar sync

Quotas count by calendar month (Thailand time) and start again on the 1st of every month. The add-on renews with your end-of-month bill.

Turn off Business Apps

Click Turn off Business Apps. Your shop can still take orders until the end of the billing period (it shows an Ends this billing cycle label). If you change your mind, click Keep using at no charge. Your menu, products and order history are kept, so everything is back when you turn it on again.

Only the account owner can turn Business Apps on or off.

If something goes wrong

It says “ยอดเงินใน Wallet ไม่พอสำหรับเปิด Business Apps” (Your wallet balance isn’t enough to turn on Business Apps)

Top up to at least the amount shown, then turn it on again.

It says “Business Apps ใช้ได้กับแพ็กเกจ Starter หรือ Business และเว็บที่สร้างด้วย Website Builder” (Business Apps works with the Starter or Business plan and websites made with the Website Builder)

The Free plan and websites deployed from Git (Static Web) can’t use Business Apps. Upgrade your plan, or use it on a website made with the drag-and-drop builder.

It says “ฐานข้อมูลร้านค้ากำลังเริ่มทำงาน” (The shop database is starting)

Your shop is being prepared. Wait a moment and try again.

Business Apps turned itself off at the start of the month

At the end of the month there wasn’t enough in your wallet for the add-on, so the website where Business Apps was turned on most recently was switched off first. Top up, then turn it on again in the website settings. All your shop data is still there.

Back to top ↑

Shop settings and getting paid with PromptPay

A new shop doesn’t take orders until you set it up and save once.

  1. In the Shop / Orders / Booking tab, open the Shop settings sub-tab.
  2. Shop status: turn on Take online orders, enter your shop name, and a notice on the menu if you have one.
  3. How customers get their order: choose at least one of Order ahead, pick up, Dine in (order at the table) or Delivery. For delivery, enter the delivery fee, the minimum order for free delivery, and the delivery area.
  4. Payment: enter your PromptPay number and account name, and/or turn on Cash at the shop.
  5. Other ways to order: enter your LINE ID and phone number. Customers see these when your shop has paused orders for a while.
  6. Click save in the bar at the bottom. It says Shop settings saved.

How customers pay

  1. The customer chooses PromptPay and sees a QR code for the exact amount. They scan it and pay with their banking app.
  2. The customer taps Paid, notify the shop. The order in your shop then shows Customer says they paid — check your banking app.
  3. Open your banking app, check the money has really arrived, then click Payment received.

We don’t check payment slips or amounts for you. You must check your banking app yourself every time before clicking Payment received. Money goes straight into your shop’s account; we never hold your money.

If the customer chooses cash, the order shows Cash, or Cash on delivery for delivered orders.

If something goes wrong

It says “พร้อมเพย์ต้องเป็นเบอร์มือถือ 10 หลัก เลขประจำตัวประชาชน/ผู้เสียภาษี 13 หลัก หรือ e-Wallet 15 หลัก” (PromptPay must be a 10-digit mobile number, a 13-digit ID card/tax ID number, or a 15-digit e-Wallet ID)

Enter only the digits of your PromptPay ID, with the full number of digits. No dashes or spaces.

It says “เลือกวิธีรับสินค้าอย่างน้อย 1 แบบ” (Choose at least 1 way to get the order)

Tick at least one option under How customers get their order, then save again.

It says “เลือกวิธีชำระเงินอย่างน้อย 1 แบบ” (Choose at least 1 payment method)

Enter PromptPay, or turn on cash at the shop, or both.

Customers see “ตอนนี้ร้านปิดรับออเดอร์ออนไลน์” (The shop isn’t taking online orders right now)

Check that Take online orders is on, that you have at least one way to get the order and one payment method, and that you clicked save.

Back to top ↑

Food ordering: menu, table QR codes and kitchen display

Customers scan the QR code on their table and order from their phone. Orders reach your shop instantly.

Add your menu

  1. Open the Menu / Products sub-tab and click Add item.
  2. Enter the name, price, category, description and an image from your website’s image library.
  3. If there are options, such as sweetness, size, or hot/iced/blended, pick from the ready-made sets or click New group. You can set a group as Required or Pick several.
  4. Turn off the Available switch when something runs out; customers will see a Sold out label. Use the up and down arrows to change the order.

In the editor, drag a menu block onto the page you want. The menu you’ve entered shows up there automatically.

Print table QR codes

  1. In Shop settings, under Table QR codes, enter the Number of tables (1–60) and choose the Page with the menu.
  2. Click Print table QR codes. You get sheets with 3 columns to cut out and stick on your tables.

Manage orders

Orders move in this order: New → click AcceptPreparing → click Mark readyReady → click Handed overDone. The orders page refreshes itself every 10 seconds, and customers see the same status on their phone.

Kitchen display (Business plan)

Click Kitchen display to open a three-column screen: new orders · preparing · waiting for pickup. It refreshes every 5 seconds. Click Turn on sound and Full screen, then put a tablet in your kitchen.

If something goes wrong

Old orders disappeared from the orders page

The In progress view shows only unfinished orders and those from the last 12 hours. Choose All to see older ones.

I turned on sound on the kitchen display but there’s no sound

The browser needs a tap on the screen before it can play sound. Click Turn on sound again, and check the tablet isn’t muted.

I can’t change an order’s status; it says “ออเดอร์นี้ปิดไปแล้ว” (This order is already closed)

Orders that are done or cancelled can’t be changed any more.

Customers see “บางรายการหมดแล้ว กรุณาแก้ตะกร้า” (Some items are sold out; please update your cart)

An item in the cart had Available turned off or ran out of stock. The customer needs to remove it and order again.

Back to top ↑

Online shop: stock and shipping

Stock goes down automatically, sold-out items can’t be oversold, and you can send customers a tracking number.

Track stock

On the product edit page, turn on Track stock and enter the number In stock. Every order takes stock off straight away. At 0, the product shows as sold out on its own. If an order is cancelled, the stock goes back automatically.

Ship parcels

  1. Open an order that chose delivery and click Ship.
  2. Choose the carrier (Thailand Post, Flash, Kerry, J&T, Ninja Van, Best, SCG, Lalamove, Grab, or type a name), then enter the tracking number.
  3. The status changes to Shipped. The customer sees the tracking number with a copy button.
  4. When the customer has received it, click Delivered to close the order.

Set the delivery fee, the minimum order for free delivery and the delivery area in Shop settings (leave the free delivery amount empty or enter 0 for no free delivery).

If something goes wrong

Customers see “สินค้าบางรายการมีไม่พอ กรุณาลดจำนวน” (Not enough stock for some items; please lower the quantity)

The quantity ordered is more than the stock left. Add more stock, or ask the customer to order fewer.

I can’t add a product; it says I’ve reached the maximum number of items

You’ve reached your plan’s number of items (Starter 60 · Business 500). Delete items you don’t sell, or upgrade to Business.

Back to top ↑

Bookings: queues, appointments and rooms

Customers see the free time slots and book on your website themselves. Bookings can never go over the number you can take.

Add a service or room

  1. Open the Services / Rooms sub-tab and click Add service / room.
  2. Choose the type: Service (appointment) with a duration, or Room (by the night).
  3. Enter the price (0 = free booking), how many you can take At the same time or the number of Rooms of this type, and the most people per booking.
  4. Turn on Bookable, then save.

Set your opening hours

In Shop settings, under Booking: turn on Take online bookings, then set your opening hours for each day, the time between slots, how far ahead people must book, how many days ahead they can book, and Holidays. Choose Confirm bookings automatically if you don’t want to confirm each one yourself.

Rooms by the night don’t use opening hours or holidays. Customers can book 1–30 nights at a time.

Manage bookings

To confirm → click ConfirmConfirmed → click Done or No-show. For customers who call or walk in, click Add booking. They’re added to the queue straight away without clashing with other bookings, and this doesn’t count toward your online booking quota.

Sync calendars with Airbnb and Booking.com

  • Our calendar link (all plans): copy it into Airbnb or Booking.com to block dates booked through your website. The link shows only the word Reserved, with no customer details.
  • Import calendars (Business plan): paste up to 5 https .ics links. They’re fetched every 30 minutes, or click Sync now.

If something goes wrong

Customers see “วันนี้ไม่มีเวลาว่าง” (No free times on this day)

That day may be a holiday or a day you’re closed, inside the book-ahead window, beyond the days open for booking, or already full (including dates blocked by imported calendars). Check your settings under Booking.

Customers see “ช่วงเวลานี้เพิ่งเต็ม กรุณาเลือกใหม่” (This time slot just filled up; please choose another)

Someone booked the same slot a few seconds earlier. Ask the customer to choose another time.

I can’t delete a service or room

There are still future bookings for it. Cancel them or wait until they’ve passed, or turn off Bookable instead of deleting it.

The Airbnb / Booking.com calendar isn’t syncing (red iCal label)

Read the message under the Sync now button. “ลิงก์ไม่ถูกต้อง” (Invalid link): copy the .ics link again (it must start with https). “เชื่อมต่อไม่ได้” (Couldn’t connect) or “ตอบกลับ …” (Responded …): try again later. “ไม่ใช่ไฟล์ปฏิทิน iCal” (Not an iCal calendar file): you pasted the wrong kind of link. While syncing fails, the dates blocked at the last successful sync are still used.

It says “ซิงก์บ่อยเกินไป” (Syncing too often)

Wait a moment and click Sync now again. Calendars already sync on their own every 30 minutes.

Back to top ↑

Shop staff accounts

Let your staff see orders and bookings from their own accounts, without sharing the shop owner’s password.

  1. Open the Shop team sub-tab and click Add staff.
  2. Enter a display name, a username (a-z, 0-9, dots and hyphens, 3–32 characters; it can’t be changed later) and a password of 8 or more characters, or click Generate.
  3. Choose the role: Staff or Manager.
  4. Copy the password (shown only once) and the Staff sign-in link, and send them to your staff member.
RoleWhat they can do
StaffOrders (including marking payment received), bookings, adding phone bookings, and the kitchen display. They can see the menu but not edit it
ManagerEverything staff can do, plus editing the menu, stock, services and rooms, calendar sync, reports and CSV
OwnerShop settings, PromptPay details, turning Business Apps on and off, and managing staff accounts

Staff stay signed in for up to 30 days and can change their own password. Orders and bookings show who last changed them.

If something goes wrong

A staff member can’t sign in; it says “ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง” (Incorrect username or password)

Check they’re using this shop’s sign-in link. The username must be typed in lowercase. If they forgot the password, the shop owner can set a new one in Shop team.

It says “บัญชีนี้ถูกปิดใช้งาน ติดต่อเจ้าของร้าน” (This account is disabled; contact the shop owner)

The shop owner turned off the Active switch for this staff member. It can be turned back on in Shop team.

It says “บัญชีพนักงานนี้เกินจำนวนที่แพ็กเกจของร้านรองรับ” (This staff account is over the number the shop’s plan allows)

This usually happens after downgrading from Business to Starter. Accounts created first still work. Accounts over the limit (labelled Over the package limit) need another account deleted first. Disabling an account doesn’t free up a spot.

I can’t add staff; it says “บัญชีพนักงานครบตามแพ็กเกจแล้ว” (You’ve reached your plan’s staff accounts)

Delete accounts you no longer use (disabled accounts still count), or upgrade to Business, which allows 20 people.

It says “เฉพาะผู้จัดการร้านเท่านั้น” (Shop managers only)

That page needs the Manager role. The shop owner can change the role in Shop team.

Back to top ↑

Sales reports and CSV files

See monthly sales and best sellers, and download your data for your accounts.

In the Report sub-tab, choose the month you want. It shows total sales, the amount Payment received (only orders marked as payment received), the number of orders and bookings, the average per order, daily sales, and your top 10 menu items and services. Cancelled orders and no-show bookings aren’t counted.

On the Business plan, the orders and bookings pages have a CSV download button. You get a file for the chosen month that opens in Excel with Thai text displayed correctly.

If something goes wrong

The “received” amount is lower than total sales

Some orders haven’t been marked Payment received. Check the amounts in your banking app and confirm them all.

Customers see “ร้านรับออเดอร์ออนไลน์เต็มแล้วในเดือนนี้” (The shop has reached its online orders for this month)

This month’s order or booking quota is used up (cancelled orders count too). The quota starts again on the 1st, or upgrade to Business to take more straight away.

Back to top ↑

WordPress

WordPress, fully installed, with its own database, HTTPS and automatic backups.

Install WordPress

Answer a few questions, wait about 1–2 minutes, and your WordPress website is ready.

  1. Go to the WordPress menu and click Install WordPress.
  2. Website: enter a name, set the Web address (a-z, 0-9 and hyphens, 3–38 characters; it can’t be changed later), and choose the starting language, Thai or English.
  3. Admin: set a username (admin isn’t allowed) and the admin email. A password is created for you automatically.
  4. Plan and storage: choose Starter, Business or Growth, and SSD or HDD disk space.
  5. Backup: by default, a backup is made every day at 2 a.m. and 7 are kept. You can change this.
  6. Check everything, then click Install WordPress.

Your website will open at name.wordpress.region.thailandhosting.com, as shown on the overview page. You need at least $5.99 in your wallet before installing, and it’s charged by hourly usage. See prices on the pricing calculator.

Back to top ↑

wp-admin, plugins, themes and backups

Manage your WordPress website right from the Console, with no extra password to remember.

  • Open wp-admin: click the button on the overview page. You’re signed in with a one-time link (valid for 60 seconds).
  • Plugins and Themes: search WordPress.org, then click Install or Install and activate. You can activate, deactivate, update or delete them from this tab.
  • Backups: each backup keeps both your files (wp-content) and your database. You can make a backup yourself, and click Restore to roll back the whole website.
  • Settings: stop or start the website, and delete the service.

Restoring replaces all your current files and database. If there’s new data you want to keep, make a backup before you restore.

The WordPress database can only be used inside your project’s private network (VPC). It can’t be opened to connections from outside.

For now, WordPress websites use our system address only. You can’t connect your own domain yet. If you need your shop’s domain right away, use a drag-and-drop website or Static Web.

If something goes wrong

The website shows 503 “WordPress is being installed” or “site is starting”

The website is still installing or starting up. Wait 1–2 minutes, then refresh.

It shows 503 “site is stopped”

The website has been stopped. Go to the Settings tab and start it.

It shows 503 “suspended for unpaid usage”

Your wallet ran out for longer than the grace period. Top up and the service will come back.

It shows 502 “WordPress did not respond” or 504

This is usually caused by a plugin or theme you just installed or updated. Deactivate the latest plugin from the Plugins tab. If that doesn’t fix it, restore an earlier backup.

I clicked Open wp-admin and it says “สร้างลิงก์เข้าสู่ระบบไม่ได้” (Couldn’t create a sign-in link)

The website may be stopped or still starting. Wait until its status is running, then click again. The link works for 60 seconds, so if you were slow to open it, click the button again.

I can’t make a backup or restore

“WordPress หรือฐานข้อมูลยังไม่ทำงาน” (WordPress or the database isn’t running): start the website first. “มี Backup หรือการกู้คืนที่กำลังทำงานอยู่” (A backup or restore is already running): wait for it to finish.

Back to top ↑

Email on your domain (Mail)

Email like [email protected], used through Webmail, and you can send email from your apps.

Create a mail server

You need a domain whose DNS you can edit. It’s ready in about 1–2 minutes.

  1. Go to the Managed Email Server menu and click Create mail server.
  2. Enter a service name and service ID (a-z, 0-9 and hyphens, 3–38 characters; it can’t be changed later).
  3. Enter the Email domain, such as example.com, and the admin mailbox name (default admin).
  4. Choose a plan, then click Create mail server.
PlanMailbox storageNumber of domains
Starter10 GB3
Business50 GB10
Growth200 GB25

You need at least $2.99 in your wallet before creating it.

Back to top ↑

Set up DNS for email

You must verify your domain before you can receive email or use Webmail. We show you the values to enter and check whether they’re right.

  1. Open your mail server and go to the Domains & DNS tab.
  2. Copy every record to your domain’s DNS provider.
  3. Click Verify domain. Later, click Check DNS again to see which records still aren’t right.
TypeNameValueWhat it’s for
TXTYour domainthailandhosting-mail-verification=…Proves you own the domain (required)
MX (10)Your domainmail.thailandhosting.comReceives email
TXTYour domainv=spf1 include:_spf.mail.thailandhosting.com ~allSPF, stops fake email
TXT…._domainkeyv=DKIM1; k=rsa; p=…DKIM email signature (appears when ready)
TXT_dmarcv=DMARC1; p=none; …DMARC (recommended)

Always use the values from your own screen. The values in this table are examples. If you use Cloudflare, set your email records to DNS only.

If something goes wrong

It says “Verify a domain before you can receive email or use Webmail”

The domain verification TXT record hasn’t been added, or DNS hasn’t taken effect yet. Add the record, wait a moment, then click Check DNS again.

It says “MX ยังไม่ชี้มาที่ mail.thailandhosting.com” (MX doesn’t point to mail.thailandhosting.com yet)

Delete the MX records from your old email provider, then add the new MX shown on screen. If an old MX is left behind, some email will still go to the old place.

It says “ตั้งค่า SPF ตามที่แนะนำ” (Set up SPF as recommended)

A domain can have only one SPF record. If you already have one, add include:_spf.mail.thailandhosting.com to that record. Don’t create a second one.

Email I send goes to the recipient’s spam folder

Check that SPF, DKIM and DMARC all pass in the Domains & DNS tab. If it says “ยังไม่พบ DKIM record” (DKIM record not found yet), add the DKIM record shown on screen.

I can’t add a domain

“แพ็กเกจนี้รองรับได้สูงสุด N โดเมน” (This plan allows up to N domains): upgrade your plan. “โดเมนนี้ถูกใช้งานอยู่แล้ว” (This domain is already in use): email for this domain is already set up on another service or account.

Back to top ↑

Create mailboxes, use Webmail and send from apps

Manage mailboxes and email groups in Webmail with your admin account.

  1. On your mail server’s Overview page, click Show password for the admin account.
  2. Click Open Webmail and sign in with the full admin email, such as [email protected].
  3. Create mailboxes for your staff and email groups in the admin area of Webmail, then send each person their email address and password.

Send email from apps or other systems (SMTP)

SettingEnter
Servermail.thailandhosting.com
Port587 (STARTTLS) or 465 (SSL/TLS)
UsernameThe full email address, such as [email protected]
PasswordThat mailbox’s password

For now, you can read email through Webmail and send through SMTP. IMAP and POP3 for fetching email into apps aren’t supported yet.

If something goes wrong

The admin password in the Console doesn’t work for Webmail

If you changed the password in Webmail, the Console doesn’t know the new one. Click Reset password on the overview page (every device that’s signed in will be signed out).

If I stop the mail server, is email sent during that time lost?

Not right away. The sender’s server keeps it and tries again for a while. Start your mail server again as soon as you can.

I can’t delete the main domain

The mail server’s first domain can’t be deleted on its own. You have to delete the whole service.

Back to top ↑

Managed Databases

PostgreSQL, MySQL, MariaDB, Redis and Valkey, with the servers and backups looked after for you.

Create a database

Choose the engine, size and disk, then take the connection details and start using it.

  1. Go to the Managed Databases menu and click Create database.
  2. Engine: PostgreSQL 16–18, MySQL 8.0 / 8.4, MariaDB 10.11 / 11.4, Redis 7.2 or Valkey 8.1 / 9
  3. Instance: name the server (used as the name for connecting), choose a size from Micro to Performance, and SSD or HDD disk of 10–1000 GB.
  4. Connectivity: connecting inside the VPC always works. Turn on a public endpoint as well if you need to connect from outside.
  5. Backup: choose every 6 hours, 12 hours, daily or weekly, the start time, and how many backups to keep (1–90).
  6. Check everything, then click create.

You need at least $3.49 in your wallet before creating it. You can make the server bigger later (the database restarts once). Disks can only grow; they can’t be made smaller.

Back to top ↑

Connect to your database and set up the firewall

Apps in the same project connect over the internal network. To connect from outside, turn on the public endpoint and allow your IP.

From services in the same project

Use the internal name server-name.internal or the private IP. If you link the database to a container, the variables DATABASE_URL, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD and DB_NAME are added for you.

From your computer or outside systems

  1. Open the Connectivity & firewall tab and turn on the public endpoint.
  2. Add the allowed IPs, such as 203.0.113.10 or a range like 203.0.113.0/24 (up to 50 entries).
  3. Copy the connection string and use it. Connections must use TLS.
postgresql://USER:PASSWORD@HOST:5432/DB?sslmode=require
mysql://USER:PASSWORD@HOST:3306/DB?ssl-mode=REQUIRED
rediss://default:PASSWORD@HOST:6379

If there are no IPs in the firewall list at all, every connection from outside is refused.

Studio and importing data

In the Studio tab you can view tables and run SQL (or view keys and run Redis commands) right from the Console. The Import tab takes files from pg_dump, mysqldump or a Redis .rdb, no larger than your disk (up to 50 GB).

If something goes wrong

I can’t connect; it says “client address is not allowed by the firewall rules”

Your IP isn’t in the firewall list yet. Check your current IP (home and mobile IPs can change), then add it in the Connectivity & firewall tab.

It says “public access is disabled for this database”

The public endpoint isn’t turned on. Turn it on in the Connectivity & firewall tab, or connect over the internal network instead.

It says “server name is required”

Your program isn’t sending the server name over TLS. Connect using the full host name with TLS turned on, or use a username like user@server-name (Redis and Valkey always need TLS).

It says “database server uses a different protocol on this port”

You’re using the wrong port for the engine: PostgreSQL 5432 · MySQL/MariaDB 3306 · Redis/Valkey 6379

It says “database server is not reachable”

The database may be stopped or restarting. Check its status on the overview page, then try again.

The firewall says the format is invalid

Enter a single IP, such as 203.0.113.10, or a CIDR range, such as 203.0.113.0/24.

Back to top ↑

Back up and restore your database

Backups run on the schedule you set. You can make one yourself before important work, and restore from the Console.

  • Backups tab: see the list, make a backup yourself, and click Restore.
  • Backup storage is charged by the size kept per month. Keep fewer backups if you want to save money.
  • Redis and Valkey can’t be restored by yourself. Open a ticket and our team will help.

If something goes wrong

It says “ต้องเริ่มฐานข้อมูลก่อนสั่ง Backup” (Start the database before making a backup)

The database is stopped. Start it first, then try again.

It says “This backup can’t be restored from the console — open a ticket”

Our team needs to restore this backup for you. Open a ticket with the database name and the time of the backup.

I can’t delete the database

First unlink it from every container, and delete or promote all read replicas.

Back to top ↑

Containers

Run apps from a Docker image. They scale with your traffic and pause on their own when nobody is using them.

Deploy a container from an image

Use an image from Docker Hub, GHCR or your own private registry.

  1. Go to the Containers menu and click Create container.
  2. Image: pick a ready-made example, or My own image and enter the image name with its tag, such as ghcr.io/you/app:1.2.0. For a private registry, enter its URL (https), username and access token.
  3. Service: set the Service ID (part of the URL) and the port your app listens on (default 8080; your app gets it in the $PORT variable). Add a command and health check path if you have them.
  4. Scaling: choose the size, the minimum–maximum number of instances, and the timeout per request (up to 60 minutes).
  5. Access: open to everyone on the internet, or only inside the VPC, and choose whether an Invoker token is required.
  6. Variables: you can paste from a .env file. Tick Secret for values that should be hidden.
  7. Click Create and deploy.

Your app will open at https://name.containers.region.thailandhosting.com, as shown on the Overview page.

Set the minimum instances to 0 so the container pauses on its own when nobody is using it (after about 15 minutes), with no server charge during that time. The first request after a pause is a little slower than usual.

Economy sizes use ARM CPUs. Your image must support linux/arm64 (build with docker buildx --platform linux/arm64).

If something goes wrong

The deploy fails and says “หา image … ใน registry ไม่พบ หรือไม่มีสิทธิ์ดึง” (Image … not found in the registry, or no permission to pull it)

Check that the image name and tag are exactly right. For a private registry, check that the token hasn’t expired and can read that package.

It says the image only has another architecture, but linux/arm64 was chosen

Rebuild the image to support arm64, or choose a size group that isn’t ARM.

I pushed the same image tag, but the app is still the old version

The image is remembered at deploy time. Click Deploy new revision to pull the latest version.

It says “Private Registry ต้องใช้ HTTPS และ credential ที่ถูกต้อง” (A private registry needs HTTPS and valid credentials)

The registry URL must start with https://, and you must enter both the username and the token.

Back to top ↑

Update, roll back and fix an app that isn’t working

Every deploy is saved as a revision you can go back to in one click.

  • Revisions tab: click Deploy new revision after changing the image or settings, and click Roll back to this to go back to an earlier version.
  • Variables tab: edit up to 100 environment variables and secrets.
  • Overview page: the Instance row shows the container’s status and latest error.

If an Invoker token is required, callers must send the token in the Authorization or X-Serverless-Authorization header. The token is shown only once for copying.

If something goes wrong

The app shows 502 “the container did not respond”

This is usually a port mismatch. Your app must listen on 0.0.0.0 on the port you set (read it from $PORT), not on localhost.

It shows 503 “instance failed to start”

The app stopped while starting, or failed the health check. See the reason at the end of the message and in the Instance row on the Overview page. Check the command and variables. The health check path must respond with a status below 500.

It shows 504 Gateway Timeout

The request took longer than the timeout you set. Increase the timeout in the Scaling tab (up to 3600 seconds), or move long-running work to the background.

It shows 429 “no available instance”

All instances are busy at the maximum number. Increase max instances or concurrency.

It shows 401 “invoker token is required”

This service requires a token. Send the token in the header, or change access to Public.

It shows 403 “only accepts internal VPC traffic”

This service only accepts traffic from inside the VPC. Call it from a service in the same project, or change Ingress to all (Internet).

Back to top ↑

Static Web (deploy from Git)

Connect a Git repo, then push to build and publish your website automatically. For people who write code.

Connect a repo and deploy for the first time

Works with GitHub, GitLab and Bitbucket, for both public and private repos.

  1. Go to the Static Web menu and click Deploy from Git.
  2. Choose your Git provider, enter the repository URL and a token (for a private repo), then click Check repository.
  3. The framework is detected and build settings are suggested. Check the Node.js version, install/build commands and output folder.
  4. Turn on Auto Deploy if you want a build on every push, then click deploy.
ProviderToken to use
GitHubFine-grained token with Contents: Read-only
GitLabToken with the read_api scope, Reporter role or higher
BitbucketRepository token (Repositories: Read) or an app password with your username

Supports Next.js (you must set output: 'export'), Nuxt, Gatsby, Astro, SvelteKit (adapter-static), Docusaurus, VitePress, Eleventy, Angular, Vue, Vite, Create React App and plain HTML.

Build-time variables are built into your website files, which anyone can see. Never put passwords or secrets in them.

Static Web shares the number-of-websites quota with drag-and-drop websites. Builds per month: Free 30 · Starter 40 · Business 120. You can connect your own domain in the Settings > Domains tab, with the same steps as for websites (paid plans).

Back to top ↑

Webhooks, build logs and rolling back a release

Push and it builds on its own. Watch the log live, and go back to an earlier release if you need to.

  1. In Settings > Auto Deploy, copy the Payload URL and Secret.
  2. Add a webhook to your repo, following the steps on screen (GitHub: content type application/json, and choose Just the push event).
  3. Push to the branch you set, then watch the build in the Builds tab.

Click New build to build yourself, Cancel build to stop, and Use this release to roll back. The latest 5 releases are kept.

If something goes wrong

I pushed but nothing was built

Look at the webhook delivery history in your repo settings: invalid webhook signature means enter the Secret again · branch … was not pushed means you pushed to a different branch · auto deploy is disabled means turn on Auto Deploy.

“คำสั่ง Build ล้มเหลว (exit code …)” (The build command failed (exit code …))

Open the log in the Builds tab to find the line that failed. Try running the same build command on your own computer with the same Node.js version.

“Build ใช้หน่วยความจำเกิน (exit 137)” (The build used too much memory (exit 137))

Do less work during the build, for example turn off source maps or split pages into smaller ones.

“Build ใช้เวลานานเกิน … ของแพ็กเกจ” (The build took longer than the plan’s … limit)

Maximum build time: Free 5 minutes · Starter 10 minutes · Business 15 minutes. Cut down the build steps or upgrade your plan.

“ไม่พบโฟลเดอร์ Output” (Output folder not found) or “โฟลเดอร์ Output ว่างเปล่า” (Output folder is empty)

Set the output folder to match what your framework creates (such as dist, out or build). Next.js needs output: 'export'.

“Access token ไม่ถูกต้องหรือหมดอายุ” (The access token is invalid or has expired) or “ไม่พบ repository” (Repository not found)

Create a new token following the table above, and check the branch name. A private repo always needs a token.

“โควตา Build หมดแล้ว” (Build quota used up)

Wait for the new day’s or new month’s quota, or upgrade your plan. Builds that fail because of a problem on our side are given back to your quota.

Back to top ↑

VPC and NAT Gateway

Your project’s private network, and a fixed outgoing IP.

VPC and subnets

Services in the same project talk to each other over internal IPs, without going out to the internet.

Every project gets a VPC and a Default subnet automatically. Go to the VPC menu to see the overview, subnets and resources in the VPC. Services can reach each other by the name service-name.internal.

  • You can add a subnet with a private IP range from /16 to /28 that sits within the VPC’s range.
  • You can change the VPC’s IP range only while there are no services in the VPC.
  • Each VPC is completely separate from the others.

If something goes wrong

I can’t delete a subnet

“ต้องลบบริการใน Subnet ก่อน” (Delete the services in the subnet first) or “Subnet นี้ใช้ NAT Gateway อยู่” (This subnet is using a NAT Gateway): move or delete the services, and remove the subnet from the NAT Gateway first. The Default subnet can’t be deleted.

Back to top ↑

NAT Gateway: a fixed outgoing IP

For systems where a bank or partner needs to add your IP to their whitelist.

  1. Go to the VPC menu, under Internet egress, and create a NAT Gateway.
  2. Choose whether all subnets (including ones created later) or only some subnets go out through the NAT.
  3. Copy the IP you get and give it to your partner to add to their whitelist.

This IP is yours alone and isn’t shared with other customers. Subnets you don’t choose use a shared outgoing IP, which can change. Each VPC can have 1 NAT Gateway. It’s charged hourly plus by the amount of data.

If you delete a NAT Gateway and create a new one within a certain time, you get the same IP back.

If something goes wrong

It says “Region นี้ยังไม่มี Static IP ว่าง” (No static IPs are available in this region yet)

The IPs in this region are all in use for now. Open a ticket and our team will get an IP ready for you.

My partner says the IP I sent doesn’t match

Check that the service’s subnet is chosen to go out through the NAT Gateway. If it isn’t, the service uses a shared IP instead.

Back to top ↑

Common problems and contacting our team

A checklist for when your website won’t open, and how to reach our team for a fast answer.

My website won’t open: what to check first

Go through these in order. Most problems you can fix yourself in a few minutes.

  1. Open your website’s free address (….thailandhosting.com). If the free address works but your domain doesn’t, the problem is DNS. See Connect your own domain.
  2. Look at the website card in the Console. If it shows On hold or Suspended, see Not enough money in your wallet.
  3. Check that you clicked Publish, not just save.
  4. Look at the banner at the top of the Console for any notice of an outage or maintenance.
  5. Try opening it from another network, for example turn off Wi-Fi and use mobile data, to see whether the problem is your network.

If something goes wrong

My Free website stopped showing in the middle of the month

The Free plan has a monthly traffic quota. When it’s used up, the website pauses without any charge and comes back next month. Upgrade to Starter if you get lots of visitors.

A cloud service (Container, Database, WordPress, Mail) stopped by itself

Your wallet has been empty for more than 72 hours. Top up, then start the service again. Don’t leave it for more than 30 days, because the data will be deleted.

Back to top ↑

Open a ticket to our team

Follow everything you’ve reported in one place, and keep replying in the same ticket.

  1. Go to the Support & refunds menu and click Open a ticket.
  2. Enter a subject, choose a category (Technical issue, Billing and plans, User account, Report abuse, Refund request, Other) and how urgent it is.
  3. Describe the details, then click Send to our team.

We reply within 24 hours, and within 1 hour for urgent issues. A closed ticket can’t be reopened, so open a new ticket instead.

How to write it so we can fix it fast

  • The name of the website or service, and the web address with the problem
  • What you did before the problem happened, and what time it happened
  • The exact message you see on screen, or a screenshot
  • Your Account ID from the account menu in the top-right corner

Never send your password in a ticket. Our team will never ask for your password.

If something goes wrong

It says “มี Ticket ที่ยังเปิดอยู่ครบ 20 รายการ” (You already have 20 open tickets)

Close tickets that are already solved, or reply in the existing ticket about the same issue.

Back to top ↑

Still stuck? Let our team help

Open a ticket from the Console. Tell us the site or service, what you did and the message on screen. Our reply comes back in the same ticket, so everything stays in one place.