Browse docs
Guides · 5 minutes

Getting started

From cold signup to a company with an outlet, invited teammates and a working schedule, in five steps. No credit card, no sales call required.

Frontelio is multi-tenant SaaS: every signup creates a brand-new company space (a "tenant") and provisions an Owner account. If you want the first screen to look alive you can add demo data, and you can have your real team using it the same afternoon.

This guide walks through the five steps a new tenant takes from zero. If you already have a team to onboard, skip ahead to step 3 — the demo data in step 2 is optional and mostly for solo evaluators kicking the tires.

Step 1 — Sign up

Head to app.frontelio.com/signup and create your company. You give a company name, your name and email, a password of at least 12 characters that includes a letter and a number, your country and which package of features to start with, and you tick the box agreeing to the Terms of Service and Privacy Policy. No credit card is required: the Free tier covers up to 10 people and 1 location. A separate demo-data checkbox is off by default (see step 2).

The same call from the API is POST /auth/signup. The API enforces the password rule and the terms flag itself, not only the form: acceptedTerms must be the boolean true, and a shorter password or one without a letter and a digit is rejected with 400.

POST /auth/signup
{
  "tenantName": "Café Joud",
  "ownerEmail": "owner@cafejoud.ae",
  "ownerFullName": "Mariam Al-Hashimi",
  "password": "Winter-Roast-2026",
  "acceptedTerms": true,
  "seedDemoData": true
}

Signup also signs you in, so the response carries a token pair. It is 200 OK:

200 OK — signup response
{
  "accessToken": "eyJhbGciOi...",
  "refreshToken": "eyJhbGciOi...",
  "accessExpiresIn": "15m",
  "refreshExpiresIn": "7d",
  "tokenType": "Bearer",
  "tenant": {
    "id": "5b0c6f0e-2d3a-4c1b-8e7f-9a0b1c2d3e4f",
    "name": "Café Joud",
    "legalName": "Café Joud",
    "industry": "Food & Beverage",
    "country": "AE",
    "timezone": "Asia/Dubai",
    "plan": "FREE",
    "subscriptionPlan": "FREE",
    "onboardingComplete": false
  },
  "owner": {
    "id": "c2d1e0f9-8a7b-4c6d-9e5f-4a3b2c1d0e9f",
    "email": "owner@cafejoud.ae",
    "mobile": null,
    "fullName": "Mariam Al-Hashimi"
  },
  "demoCredentials": {
    "password": "Demo2026!!",
    "note": "Use this password to sign in as any of the 5 pre-seeded demo staff (Sarah, Hassan, Maria, Ahmed, Priya). Their emails appear in your Team list."
  }
}

Optional fields: country (a two-letter code, default AE), timezone (worked out from the country when you omit it), solutionProfile (one of timeAttendance, hrPeople, frontlineOps or everything; default everything) and requestedPlan (the plan you clicked on the pricing page, recorded as interest only). The company always starts on the Free plan. The tiers are Free, Basic, Starter, Growth and Enterprise; you change plan later in /admin/billing. Signup is limited to 5 requests per minute per IP address.

Step 2 — Optional: explore with demo data

Demo data is opt-in. With seedDemoData on, signup also provisions a default outlet named after your company, 5 demo staff (one OUTLET_MANAGER, one SHIFT_SUPERVISOR and three STAFF), three shifts across today and tomorrow, sample content (a sample SOP, a welcome survey, a welcome announcement and a logbook entry), a starter opening checklist, three asset categories, a vendor, five assets, a shift template and the Frontelio training pack. With it off, which is the default, you get an empty company with no outlet and demoCredentials is null. That is the right choice if you are bringing your own data via API or CSV import.

To see the staff side, open a private browser window or the mobile app and sign in as one of the demo workers: Sarah Mansoor (outlet manager), Hassan Ali (shift supervisor), and Maria Santos, Ahmed Khan and Priya Sharma (staff). Each name carries a "(demo)" suffix. The shared password is Demo2026!!. The signup response gives you that password and a note, not the email addresses: they are generated per company in the form demo.<first name>.<number>@demo.frontelio.local, so read them from the Team list at /users (or GET /users).

Step 3 — Invite your real team

Workers sign in to the mobile app with a personal invite code, so nobody hands out a typed password. From /users, choose Invite staff. The dialog has three tabs:

  • New joiner — add a brand-new person (name, email or mobile number, role and primary outlet) and generate their code in one step. They set their own password after redeeming it.
  • Existing staff — generate a code for one person who is already on /users.
  • Bulk — tick several existing people and generate all their codes at once. Someone who already has an unused code keeps it, so running this twice is safe.

A code looks like FCO-7K2M9QXW4T: FCO- followed by 10 letters and digits (never 0, O, 1, I or L). It works once and is valid for 90 days by default; the dialog also offers 7 or 30 days. Frontelio does not email or text the code: you copy it, print it, or send it to the person yourself.

Bulk import on /users creates people from pasted CSV or TSV (up to 500 rows per import). It does not create invite codes. Generate those afterwards on the Bulk tab.

The same flow through the API

Create the person without a password, then mint the code. You need the user.create and user.invite permissions, which the owner has. A person created without a password cannot sign in with a password until they have set one after redeeming an invite code.

POST /users
{
  "fullName": "Ahmed Hassan",
  "mobile": "+971500000001",
  "roleCode": "STAFF",
  "primaryOutletId": "3f1c2b7e-6a54-4d1e-9b0a-7c2d5e8f9a10"
}

The response is the new user; take its id. Then mint codes for one person or up to 500 at a time. An optional expiresAt (ISO 8601) replaces the 90-day default.

POST /user-invites/bulk
{
  "userIds": [
    "8f14e45f-ceea-467a-9575-1f1a3c2d4b6e",
    "c9f0f895-fb98-4b91-99f4-1f3b2c4d5e6f"
  ]
}
201 Created — bulk invite response
{
  "items": [
    {
      "code": "FCO-7K2M9QXW4T",
      "userId": "8f14e45f-ceea-467a-9575-1f1a3c2d4b6e",
      "fullName": "Ahmed Hassan",
      "email": null,
      "expiresAt": "2026-12-19T08:00:00.000Z",
      "reused": false,
      "created": true
    }
  ],
  "total": 1
}

For a single person, POST /user-invites takes { "userId": "<uuid>" } and returns the invite, including its code and expiresAt. GET /user-invites lists invites and DELETE /user-invites/:id revokes one that has not been used yet.

Step 4 — Print the sheet and onboard your team

When codes are ready, choose Print invite sheet. The sheet has one card per person with their name, a QR code, the code, and three lines of instructions. It opens /users/invites/print and uses your browser's print dialog; it is not a generated PDF. Cut along the lines and hand each worker their own card. You can come back at any time: /users/invites lists every invite, so you can see who has not redeemed theirs yet and revoke a code that was lost or sent to the wrong person.

Each worker installs Frontelio from the App Store or Google Play (links at app.frontelio.com/install), opens it, and taps Have an invite code? on the sign-in screen. They scan the QR code or type the whole code, including the FCO- prefix.

Invited workers start without a password, so the app then asks them to set one. That password is how they sign back in after the code has been used. Redeeming needs a connection: the app makes one online call to the public POST /auth/invite/:code/redeem, and the code is consumed at once. A code that is unknown returns 404, one that is expired or revoked returns 403, and one already used returns 409. Redeeming is limited to 10 attempts per 15 minutes per IP address. Once they are signed in, the app opens on the Today screen.

Step 5 — Finish the Setup Pulse checklist

As owner you see a Setup Pulse card at the top of the Today screen (/today) until setup is complete. It tracks eight steps, and each one links to the page where you do the work. Three are required, and the card finishes when they are done (or when you choose "I'm set up — dismiss"):

  1. Add your first outlet — /outlets. At least one outlet.
  2. Invite at least 1 teammate — /users. At least two real people in the company, counting you. The demo staff do not count.
  3. Schedule a shift or clock someone in — /schedule. One published shift, or one real clock-in.

The other five are optional and only make the checklist more complete:

  • Create 3 asset categories — /categories
  • Add a vendor — /vendors
  • Register 5 assets — /assets
  • Create a shift template — /shift-templates
  • Build a checklist template — /checklist-templates. There is a library of starter checklists at /checklist-templates/library that you can install and edit.

With demo data on, the default outlet and the five optional steps already show as done. The demo staff and demo shifts do not count toward the two required steps for people and scheduling, so those still need real activity.

The card also links to the HR setup wizard at /settings/hr-setup (working week, leave types and holidays). The same progress is available from GET /onboarding/status. Nothing else has to be finished before you use the product: point-of-sale connections are set up in /admin/integrations and plan changes in /admin/billing whenever you need them.

Next steps

Once you're onboarded, the platform's real surface area opens up. Here's where to go next depending on what you came here to do:

  • Physical access control: Frontelio Access overview — turn every staff phone into a credential for doors, rooms, lifts, lockers.
  • Build on top of the platform: API Reference — authentication, the developer API, rate limits and errors.
  • Get help: email support@frontelio.com — we reply during UAE business hours (Sunday to Thursday, 09:00-18:00 Gulf time). Response targets by severity are on the SLA page.