Getting Started
Install CloudPOS, enter your company API key, sign in, choose a store, let the first sync finish and set the counter number.
This page takes you from a fresh install to your first bill. It takes about five minutes on a good connection.
You need three things from your manager or administrator:
- Your company API key (also called the tenant key). It is at least 10 characters long.
- Your email and password for CloudPOS.
- The counter number for this device (for example 11). Each till in a store has its own number.
Step 1: Open the app
When CloudPOS starts, it shows Getting your counter ready… while it loads the language settings and the data saved on the device.

*Start-up screen: Getting your counter ready… while the app loads language settings and cached data*
- On a first install, the app then asks for the API key.
- If the API key is already saved, it goes straight to the login screen.
- If you are still signed in, it opens the app directly.
Step 2: Enter the API key
The API Key Required screen appears only once per device.
- Type the key into Enter your API key.
- Tap Submit.
- The app looks up your company's server address and saves it. You do not type any server address yourself.
If you do not have a key, tap Register Here or Contact your administrator for your API key.
Messages you may see:
Message | What it means |
|---|---|
API key is required | The field is empty. |
API key must be at least 10 characters | The key is too short. Check for a missing character. |
API key saved. Domain verification failed, so default server URL is being used. | The key was saved but the server lookup failed. The app uses the default CloudPOS server. If login then fails, check the key and the internet, then use Reset API Key. |
Step 3: Log in

*Login screen: email, password, Remember Me, Forgot Password and Reset API Key*
- Enter your email in Enter email address.
- Enter your password in Enter password.
- Tick Remember Me if this is your own device. The app then fills in your email next time.
- Tap Continue. You see Logging in... while the app checks your details.
Other buttons on this screen:
- Forgot Password? — enter your email and tap Continue. You get a code. On the Reset Password screen enter the code, a new password and Repeat Password, then tap Verify.
- Reset API Key — removes the API key and all saved data from this device. The app asks Reset API key? first. Use it only when the device must connect to a different company, or the key was entered wrong. The counter number and today's bill sequence are kept.
Common login errors:
What you see | Why |
|---|---|
Email is required / Enter a valid email address | The email field is empty or not a valid email. |
Unauthorized | Wrong email or password. |
Forbidden. You do not have the required role for this tenant. | Your user exists but has no POS role in this company. Ask an admin to give you a role. |
You have no permission to any store. Please contact your administrator. | Your user is not linked to any store. |
Only these roles can sign in to the POS: sales_executive, restaurant_sales, attender, kitchen_master, company_admin, purchase_manager, delivery_executive.
Step 4: Select the store
After login, the Select Store screen lists every store (branch) you are allowed to use. It appears even if you have only one store.

*Select Store after sign-in: choose which branch (store) this counter works with*
- Read the list under Choose Your Store. Each card shows the store name and Store ID.
- Tap your store. In the demo we pick متجر النجمة Store (Store ID 2).
- Wait while Preparing your workspace... runs. Then you see "[store name] ready. Loading dashboard...".
You can change store later from the profile card in the sidebar. See Navigation and roles.
Step 5: Let the first sync finish
The app now downloads everything it needs to bill for this store. The status line shows each step:
- Loading user permissions... — your role and what you may open.
- Syncing delivery methods...
- Loading general settings...
- Applying app preferences... — the company settings that switch buttons and features on or off.
- Syncing customer directory...
- Loading branding assets... — the logo.
- Syncing bank accounts...
- Preparing invoices...
- Syncing payment methods... and Refreshing checkout payment methods...
- Loading stock grouping configuration...
- Fetching voucher types...
- Updating user directory...
- Retrieving store details...
- Loading supplier catalog... — shows "Suppliers synced: N available."
- Syncing measurement units...
- Fetching rack metadata...
- Downloading document configurations... — receipt and invoice layouts.
- Refreshing product categories... — shows "Categories ready: N sellable, N total."
- Fetching product catalog (this may take a moment)... — then "Products ready: N loaded."
- Starting realtime synchronization...
- Finishing touches...
If you switch to a different store, the app first clears the cached products, categories and document layouts of the old store. Then it runs the same steps for the new store.
The product download is the longest step. It loads in batches and shows "Loading products... N loaded". Do not close the app during this step.
Pending day close prompt
If your company uses a compulsory day close (setting COMPULSORY_DAY_CLOSE_REGISTER), the app checks whether you left a past business day open.
- If yes, you see Day Close Pending: "You did not close your last day sales for [date]. Do you want to close it now?"
- Tap Yes to open the Day Close form for that date. Tap No to continue without closing.
See Day close and shifts.
Step 6: Set the counter number
Every device in a store needs its own counter number. It is printed in every receipt number.

*POS Counter Identity: counter number 1-999 (unique per store) becomes part of every offline receipt number; last bill today, optional last-bill override after a reinstall, next bill number and device ID*
- Open Settings from the menu.
- Find POS Counter Identity.
- Enter the Counter number (use 1–999). In the demo it is 11.
- Save. You see "Counter 11 saved. Next bill No.: …".
If no number is set, the app uses counter 1 and shows Using default counter 1 • Tap to confirm. Set the real number before the first sale.
Every counter in the same store must use a different number. Changing it does not change receipts that were already issued.
Your first screen
The app opens the screen that matches your role:
Role | First screen |
|---|---|
| Billing |
| Restaurant |
| Attender |
| Kitchen Master |
| Dashboard |
Next: make your first sale in Billing.
How it works
Tenant discovery
- The API key identifies your company (the "tenant"). The app sends it to the CloudPOS directory service (
POST https://cloudposai.com/api/v1/find-domainwith headerX-Tenant-Key: <your-tenant-key>). - The service answers with your company's server domain. That becomes the base address for every API call.
- The key is saved on the device. Every later request sends it in the
X-Tenantheader. - See API overview for the exact request and response.
Sign-in
- Login calls
POST /api/v1/user/signinwith email and password. - The answer contains an access token, your user id and name, your company, your role (
user_role), your stores, the company time zone and country, and ZATCA details (VAT number, CR number, ZATCA company name). - The sign-in answer does not list permissions. The app loads them from the roles list in step 1 of the sync.
- The app also reads the server clock from the response so receipts use the server time even if the device clock is wrong.
- Logout (bottom of the menu) tells the server to end the session, then clears the session on the device.
Counter identity and receipt numbers
- Receipt numbers look like
store-counter-YYMMDD-sequence. Example: 2-11-261027-0003 = store 2, counter 11, 27 October 2026, third bill of the day on that counter. - The counter is shown with at least two digits (counter 3 prints as 03). The daily sequence uses four digits.
- The device also has its own Device ID, shown in the counter card.
- Clear Local Storage and Reset API Key keep the counter number and today's sequence. After a full reinstall the device forgets today's sequence. Use Last bill sold today (optional) in the counter card. Look up this counter's last bill today in the admin panel and enter its last digits (for 2-11-261027-0010 enter 10). Bill numbers can only move forward.
Offline-first or online-first
Your company chooses how Confirm Order behaves with the setting POS_OFFLINE_SALES (on by default).
Mode | What happens on Confirm |
|---|---|
Offline-first ( | The sale is saved on the device with its receipt number and printed at once. It is sent to the server in the background. Billing never waits for the internet. |
Online-first ( | The app waits for the server. If the server accepts, the cart clears and the receipt prints. If the server rejects, the cart stays so you can fix it. If the answer is unclear, the cart clears without printing and the sale is flagged for review. |
Sales that did not reach the server are listed in Sales → Confirmed Orders (the Sync attention page). Nothing is retried automatically. Staff send them again from there. See Settings and sync and Troubleshooting and FAQ.
Subscription
If the company subscription is blocked, expired, suspended or inactive, order actions are blocked and the app shows the subscription message with Manage Subscription or Contact Administrator. Ask the account owner to renew.