# AI Creation & Data Privacy (https://docs.skillhabit.com/docs/ai-creation-and-data-privacy) ### What This Is For [#what-this-is-for] Skillhabit’s **AI Course Studio**, **Generate with AI**, and optional **AI image generation** help authors draft courses faster. This page explains **what those features do**, **what data is involved**, and **how to use them safely**—so security, legal, and L\&D reviewers can decide with clear facts. Step-by-step authoring: [AI Course Studio](/docs/create/ai-powered-creation/ai-course-studio) · [Generate With AI](/docs/create/ai-powered-creation/generate-with-ai).\ Platform trust (EU hosting, GDPR, ISO 27001): [Trust & Security](/docs/trust-and-security). ### Who This Is For [#who-this-is-for] **Administrators**, security / privacy reviewers, and authors in workspaces where the **AI** capability is enabled. ### What the AI Features Are [#what-the-ai-features-are] | Feature | Where | What you send | What you get | | --------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | **AI Course Studio** | **Create** start page | Topic prompt; optional PDFs / Word / text files or public file URLs; context choices (audience, length, rigor, language, …) | A **new draft** built-in course (outline → generated chapters) | | **Generate images with AI** | Inside **AI Course Studio** → **Context** (optional) | Image generation is tied to the course generation flow; styles **Illustration** or **Realistic** | Images placed into the draft—**experimental**; always review | | **Generate with AI** | Built-in course **chapter editor** | Prompt plus scope (chapter / element / course), tonality, language | A suggestion you **accept** or **reject** before it becomes draft content | AI is **capability-gated**. If **AI Course Studio** is missing from Create, ask Skillhabit to enable it. Generated output is always a **draft**—you review, edit, and publish like any other course. ### What Leaves Your Prompt (Important for Companies) [#what-leaves-your-prompt-important-for-companies] To generate content, Skillhabit **sends the material you submit for that generation**—prompts, course context, and any uploaded or linked source files—to **OpenAI**, which powers the generation. The product shows this clearly on **AI Course Studio → Start** and in **Generate with AI**: > We use OpenAI to help generate courses. Files or text you submit may be logged by their system for up to **30 days**. **Generate with AI** uses the same partner wording: contexts and prompts used for generation may be logged for up to **30 days**. Read OpenAI’s published API data rules here (linked from the product): [OpenAI API data usage policies](https://openai.com/policies/api-data-usage-policies). **Practical meaning for your organization:** * Treat prompts and uploaded sources as **data you choose to process with an AI provider** for that job—not as something that stays only inside your Skillhabit course editor during generation. * Do **not** paste secrets, credentials, personal data you are not allowed to process, or confidential material you cannot share with a processing partner. * Prefer **summaries or redacted** source packs when the full document is sensitive. * Turn **Generate images with AI** **off** when you do not need images—less generation surface, less optional media to review. Skillhabit does **not** ask you to “consent to train a public model” inside these screens. The in-product notice is about **OpenAI logging inputs for a limited period** (up to 30 days) as disclosed above. For contracts, subprocessors, and DPA wording, use the [TicTac Trust Centre](https://www.tictaclearn.net/trust-center) and your Skillhabit / TicTac contact—those documents are the legal source of truth. ### What Stays in Your Workspace [#what-stays-in-your-workspace] | Asset | Where it lives after generation | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Accepted course text, structure, and questions | Your Skillhabit **draft** (then published course) in **Create**—same access rules as other content (**collaborators**, **Admin**, visibility) | | Accepted AI images | Stored with your course media like other Create assets | | Rejected **Generate with AI** suggestions | Not kept as course content when you reject them | | Learner data, certificates, groups, progress | **Not** used as training material for these authoring features—you are not uploading Analyze or Users & Groups exports into AI Course Studio unless **you** paste them into a prompt | Your Skillhabit **platform** (learner data, certificates, day-to-day product) remains covered by the same EU hosting and compliance posture described in [Trust & Security](/docs/trust-and-security). AI generation is an **optional authoring aid** that processes the inputs **you** supply for that generation. ### Controls You Already Have [#controls-you-already-have] | Control | Why it helps | | -------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | **AI** capability (on/off for the workspace) | AI tools only appear when Skillhabit has enabled them for your account | | **Create** / collaborator access | Only authors you trust can open Studio or Generate with AI | | Optional **Generate images with AI** | Off by default in the sense that you must enable it on **Context**; leave it off for text-only drafts | | Accept / reject in **Generate with AI** | Nothing lands in the course until someone accepts | | Normal **Publish** / visibility | Drafts are not learner-visible until you publish and assign | ### Good Practice Checklist [#good-practice-checklist] 1. Enable AI only for workspaces (or authors) that need it. 2. Write prompts that describe the **requirement**—not full HR files full of employee PII. 3. Upload the **minimum** source documents needed for accuracy. 4. Review every draft for correctness, bias, and compliance tone before publish. ### Related [#related] * [AI Course Studio](/docs/create/ai-powered-creation/ai-course-studio) * [Generate With AI](/docs/create/ai-powered-creation/generate-with-ai) * [AI-Powered Creation](/docs/create/ai-powered-creation) * [Trust & Security](/docs/trust-and-security) * [TicTac Trust Centre](https://www.tictaclearn.net/trust-center) * [OpenAI API data usage policies](https://openai.com/policies/api-data-usage-policies) # Allowlist Skillhabit Email (https://docs.skillhabit.com/docs/allowlist-skillhabit-email) ### What This Is For [#what-this-is-for] Corporate filters often quarantine or drop platform mail. This guide helps you and your IT team **allowlist** Skillhabit senders so important emails reach people—welcome invitations, Magic Links, mandatory assignment mail, certificate expiry warnings, and more. “Allowlist” and “whitelist” mean the same thing in mail-filter tools: treat these senders as trusted. ### Who This Is For [#who-this-is-for] Workspace **administrators**, working with **IT / security / mail** admins who manage spam filters, Secure Email Gateways, or Microsoft 365 / Google Workspace policies. ### Why It Matters [#why-it-matters] People miss training and sign-in when mail never arrives. Highest-impact messages include: | Email | Why users need it | | ------------------------------------------------------- | -------------------------------------------------- | | **Welcome Invitation** | First sign-in instructions when you invite someone | | **Login code** / **Magic Links** and other sign-in mail | Access without a password | | **New Content Notification** | Mandatory content was assigned | | **Content Reminder Notification** | Unfinished mandatory work | | **Certificate Expiration Notification** | Certificates approaching expiry | | **User Archived Soon / User Archived** | Account about to be archived, or archived | | Academy order / purchase admin mail | Paid catalog workflows (when Academy is enabled) | Full catalog: [Notifications reference](/docs/reference/notifications). Template copy: [Notifications](/docs/configure/notifications). *** ### What to Allowlist [#what-to-allowlist] #### Default Skillhabit sender [#default-skillhabit-sender] By default, Skillhabit sends from your workspace address: ```text {your-workspace-id}@skillhabit.com ``` Example: if the workspace id is `acme`, the From address shown in email preview is `acme@skillhabit.com`. The display name uses your **Company name** from **Configure → Customization**. Ask IT to allowlist: 1. **The exact From address** for your workspace (`{workspace-id}@skillhabit.com`), **or** 2. **All mail from** `@skillhabit.com` (simpler if you have several workspaces) Prefer **domain / From-address** rules over IP allowlists. Sending infrastructure can change; domain rules stay stable. #### Custom email domain [#custom-email-domain] If you activated an **Email Domain** under **Configure → Custom Domains**, mail can come from **your** domain instead. Allowlist that domain (and the From addresses Skillhabit uses on it) as well. If email-domain validation fails, Skillhabit falls back to `{workspace-id}@skillhabit.com`. Setup: [Custom Domains](/docs/configure/custom-domain). #### Links inside emails [#links-inside-emails] Notification and invitation **links use the default Skillhabit domain** in the URL, even when a custom **platform** domain redirects the browser afterward. Do not block those Skillhabit link hosts in mail or web filters, or people may not open invitations and reminders. *** ### Example: Microsoft 365 [#example-microsoft-365] Use these values in Microsoft admin tools (pick one): | Prefer | Value | | ------------------------------- | ------------------------------------------------------------------- | | Whole Skillhabit sender domain | `skillhabit.com` | | One workspace only | `{workspace-id}@skillhabit.com` (for example `acme@skillhabit.com`) | | Custom Email Domain (if active) | your sending domain from **Configure → Custom Domains** | Portal labels move occasionally—search the page for the control name if the path differs slightly. Microsoft’s own guides: [Create allow lists](https://learn.microsoft.com/en-us/defender-office-365/create-safe-sender-lists-in-office-365) · [Tenant Allow/Block List](https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-about). #### Tenant Allow/Block List (org-wide) [#tenant-allowblock-list-org-wide] Best first stop when Microsoft 365 / Defender is filtering Skillhabit mail for everyone. 1. Sign in to the [Microsoft Defender portal](https://security.microsoft.com/) as an admin who can manage email security. 2. Go to **Email & collaboration** → **Policies & rules** → **Threat policies** → **Tenant Allow/Block Lists**\ (direct: [Tenant Allow/Block List](https://security.microsoft.com/tenantAllowBlockList)). 3. Open **Domains & addresses**. 4. Create an **Allow** entry for `skillhabit.com`, or for `{workspace-id}@skillhabit.com` if you want a narrower rule. 5. Save, then send a test **Welcome Invitation** or Magic Link to a Microsoft 365 mailbox and confirm it lands in **Inbox** (not Junk / Quarantine). Allow entries can be time-limited. If Skillhabit mail is blocked again after an entry expires, recreate the allow or use a durable anti-spam / mail-flow rule below. #### Anti-spam policy — allowed domain (durable) [#anti-spam-policy--allowed-domain-durable] Use when you want a longer-lived org policy for Skillhabit as a known sender. 1. In the Defender portal, open **Email & collaboration** → **Policies & rules** → **Threat policies** → **Anti-spam**. 2. Edit the **default** policy, or a custom policy that covers the users who need Skillhabit. 3. Under **Allowed senders and domains** (wording may be **Allow & block list**), add: * **Allowed domains:** `skillhabit.com`, or * **Allowed senders:** `{workspace-id}@skillhabit.com` 4. Save the policy and wait a few minutes for it to apply. 5. Test delivery again. Microsoft recommends using allow lists carefully—they can reduce spam filtering for that sender. Prefer the domain or single address you actually need; do not allowlist unrelated domains. #### Outlook Safe Senders (one person) [#outlook-safe-senders-one-person] Useful for a quick fix while IT finishes an org-wide rule. 1. In **Outlook on the web** or the Outlook desktop app, open **Settings** → **Mail** → **Junk email** (or **Junk email** options). 2. Under **Safe senders and domains**, add `skillhabit.com` or `{workspace-id}@skillhabit.com`. 3. Save, then move any Skillhabit message still in Junk back to Inbox and confirm later mail arrives cleanly. This only helps that mailbox. Prefer Tenant Allow/Block List or anti-spam for the whole company. #### Already in Quarantine? [#already-in-quarantine] 1. In Defender, open **Email & collaboration** → **Review** → **Quarantine** (or search **Quarantine**). 2. Find the Skillhabit message, release it if appropriate, and submit it as a false positive / clean if your process requires that—Microsoft can create related allow entries from submissions. 3. Still add a lasting allow for `skillhabit.com` (or the workspace From address) so the next invite is not quarantined again. *** ### Example: Google Workspace [#example-google-workspace] If your company uses Google Workspace instead of Microsoft 365: 1. In the [Google Admin console](https://admin.google.com/), go to **Apps** → **Google Workspace** → **Gmail** → **Spam, phishing and malware** (or **Compliance**, depending on your Admin UI). 2. Create or edit an **email allowlist** / approved sender setting for `skillhabit.com` (or the exact From address). 3. Apply it to the organizational units that use Skillhabit. 4. Send a test invite and confirm delivery to Inbox. Exact menu names vary by Admin edition—search Admin help for “email allowlist” if you do not see the control. *** ### Steps for Your IT Team [#steps-for-your-it-team] Share this checklist with whoever owns inbound mail policy: 1. **Identify the sender** — Confirm the From address in **Configure → Email Notifications** (open any template → preview). Note `{workspace-id}@skillhabit.com`, or your custom email domain if active. 2. **Create an allowlist / safe-sender rule** for that address or `@skillhabit.com` (and your custom sending domain if used). Apply it to the mailboxes or groups that use Skillhabit—not only admins. For Microsoft 365, use the examples above. 3. **Skip quarantine / spam scoring** for those senders when your gateway supports it (Microsoft 365 allow lists, Google Workspace approved senders, Proofpoint / Mimecast / similar). 4. **Do not strip or rewrite** Skillhabit message links in a way that breaks sign-in or assignment URLs. 5. **Test** — Invite a test user on a corporate mailbox, or trigger a mandatory assignment email, and confirm delivery to Inbox (not Junk / Quarantine). 6. **Escalate** — If mail still never arrives after allowlisting, contact [support@skillhabit.com](mailto:support@skillhabit.com) with the workspace id, recipient address, and approximate send time. Skillhabit support can help investigate delivery; your IT team still owns gateway rules. Skillhabit does **not** publish a fixed public IP list for outbound product email. Domain-based allowlisting is the recommended approach. *** ### What Admins Should Check in Skillhabit [#what-admins-should-check-in-skillhabit] Allowlisting only helps when Skillhabit actually sends to a real, active mailbox: | Check | What to do | | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | | Real address | Addresses on **`@noemail.skillhabit.com`** never receive mail — [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) | | Active status | After bounces or spam complaints, email can become **inactive**; reactivate in **Users & Groups** | | Correct identifier | SSO / Entra may store a UPN-style value instead of a mailbox — [SSO and Email Addresses](/docs/configure/sso-and-email) | | Template / toggle | Optional reminders must be **on** in **Email Notifications**; Welcome mail only sends when you choose to invite | *** ### Related [#related] * [Trust & Security](/docs/trust-and-security) * [Notifications](/docs/configure/notifications) * [Notifications reference](/docs/reference/notifications) * [Custom Domains](/docs/configure/custom-domain) * [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) * [SSO and Email Addresses](/docs/configure/sso-and-email) # Skillhabit Documentation (https://docs.skillhabit.com/docs) # Skillhabit Documentation [#skillhabit-documentation] Find answers for everyday Skillhabit work: creating and delivering learning, managing users, configuring your workspace, and connecting integrations. Questions or suggestions? Email [support@skillhabit.com](mailto:support@skillhabit.com). ## Browse by Area [#browse-by-area] # Trust & Security (https://docs.skillhabit.com/docs/trust-and-security) ### Why This Page Exists [#why-this-page-exists] Buying or running a learning and certification platform means trusting someone with learner data, certificates, and sometimes commercial records. This page summarizes how Skillhabit approaches that trust—so you can decide with facts, not slogans. ### Who This Is For [#who-this-is-for] **Administrators**, security reviewers, procurement, and anyone asked “where does our data live?” or “are you ISO / GDPR ready?” ### Part of the TicTac Group [#part-of-the-tictac-group] Skillhabit is a TicTac Learn product and part of the **TicTac Group**. Information security and privacy practices for the platform sit with that organization. Legal documents (privacy policy, DPA, terms) live in the [TicTac Trust Centre](https://www.tictaclearn.net/trust-center). ### Hosted Entirely in the EU [#hosted-entirely-in-the-eu] Skillhabit runs **entirely in the European Union**. Production systems and the primary data stores your workspace uses are in the EU—so residency stays inside the EU for the platform itself. ### GDPR [#gdpr] We design and operate Skillhabit for **GDPR**. Controllers keep their own obligations when they run a workspace; we support that with contracts and processes documented in the Trust Centre (including the Skillhabit DPA where applicable). Practical takeaways for customers: * Know **who** is controller vs processor for your use case (your organization vs Skillhabit as supplier) * Use the Trust Centre for current **privacy**, **cookies**, and **DPA** wording—those documents win over marketing pages * Limit who can see PII in the product with **Users & Groups**, managers, and **App access** ### ISO 27001 [#iso-27001] TicTac Learn holds **ISO 27001:2022** certification for information security management. That certification covers how we run secure operations for learning platform services—including Skillhabit. Read the public announcement: [TicTac Learn Achieves ISO 27001:2022 Certification](https://www.tictaclearn.net/news/tictac-learn-achieves-iso-27001-2022-certification). ### System Status [#system-status] Check live availability for the public site, application, and API on the Skillhabit status page: **[status.skillhabit.com](https://status.skillhabit.com/)** Subscribe there if you want alerts when something changes. ### Where to Go Next [#where-to-go-next] | Need | Where | | --------------------------------------------------------- | ----------------------------------------------------------------------- | | Privacy, DPA, terms | [TicTac Trust Centre](https://www.tictaclearn.net/trust-center) | | AI Course Studio / image generation and OpenAI processing | [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy) | | Corporate filters blocking Skillhabit mail | [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) | | Live uptime | [Skillhabit status](https://status.skillhabit.com/) | | Sign-in and identity | [External Identity Providers](/docs/external-identity-providers) | | Who can access what | [Users & Groups](/docs/users-and-groups) · [Configure](/docs/configure) | If your security questionnaire needs details beyond this page, start from the Trust Centre and ask your Skillhabit / TicTac contact for the latest package. # Collections (https://docs.skillhabit.com/docs/academy/collections) ### What This Is For [#what-this-is-for] **Collections** organize Academy products into groups learners can browse on the storefront. Use them when the front page focuses on collections (when **Show all items on the front page** is off) or when you want curated sections even if every item also appears on the front page. ### Who This Is For [#who-this-is-for] Workspace **administrators** who manage the Academy catalog. ### Before You Start [#before-you-start] * Add products to the Academy (**Academy Visibility** on) so you have items to place in collections. * Decide whether the front page should emphasize collections—**Manage Academy** → **Visibility** → **Show all items on the front page**. *** ### Create and Manage Collections [#create-and-manage-collections] 1. Open **Academy** → **Manage Academy** → **Collections**. 2. Choose **Add Collection**. 3. In **Manage Collection**: * Set **Collection name**, **Collection description**, and an optional image. * Add products on the **Items** tab (and reorder them there if needed). * Optionally turn on **Collection is pinned** to feature the collection prominently. * Optionally turn on **Collection is hidden** to keep it out of the browsable list while you prepare it. 4. **Save changes**. ### Reorder Collections [#reorder-collections] On the Collections list, choose **Reorder**, drag collections into place, then **Save New Order** (or **Cancel**). Search is disabled while reordering. ### How Collections Relate to Visibility [#how-collections-relate-to-visibility] Collections only organize products that are already in the Academy. They do **not** replace workspace catalog visibility or per-product availability—see [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). ### Related [#related] * [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) * [Customize Your Academy](/docs/academy/customizability) * [Sell a Course](/docs/use-cases/sell-a-course) # Content Licenses (https://docs.skillhabit.com/docs/academy/content-licenses) ### What This Is For [#what-this-is-for] **Content licenses** add **time-bounded, single-use–style access** on **paid** Academy products (price greater than zero). A license is issued when a paid **order completes** (or when an admin issues one), then **consumed** when the learner completes the product, runs out of attempts, or the validity period ends. Licenses sit **on top of** visibility and attempt limits. They do **not** replace visibility: for license-enabled products, learners normally need **both** visibility and a valid license. | Check | What it controls | | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | **Visibility** (groups, individual, Academy enrollment) | Whether the person can **see** the content in **Learn** | | **Content license** | Whether they can **open and use** a license-gated paid product after they already have visibility | | **Attempt limits** | How many times they may start—still enforced under a license | Learner-facing behavior: [Visibility in Learn](/docs/learn/visibility) and [Attempt Limits](/docs/learn/attempt-limits). ### Who This Is For [#who-this-is-for] Administrators configuring paid Academy products; learners who purchase or receive a license. ### In Short [#in-short] 1. Licenses apply to **paid** Academy products only—**Stripe integration** or **Manual flow**. 2. Turn on **Use licensing for this content** and pick **License validity** (clock starts at issue time). 3. A license is **issued when the order completes** in **Academy** (or when an admin issues one). 4. It is **consumed** when the learner passes (or completes the program), runs out of attempts, or the validity period ends. 5. Manual issuance also grants **individual visibility** in **Learn**. *** ### Enable Licenses on a Product [#enable-licenses-on-a-product] 1. Set availability to **Purchase** and a **price** greater than zero. 2. Enable **Use licensing for this content**. 3. Choose a **License validity** period. 4. For sales, the license is issued when the **order completes**. For admin-issued licenses, the clock starts when the admin creates it. ### Supported Validity Periods [#supported-validity-periods] * **1 month** · **3 months** · **6 months** · **1 year** · **2 years** · **3 years** · **5 years** ### Multiple Licenses [#multiple-licenses] Each completed paid order typically adds **one** license. Admins can issue extras. A user can hold more than one license for the same product; unused licenses stay until consumed or expired. ### View and Manage Issued Licenses [#view-and-manage-issued-licenses] In **Academy**, open the product’s **Visibility and access** settings, then **Manage licenses**—see holders, expiry, source, and issue or remove licenses. You can also manage licenses on a user profile in **Users & Groups**. ### When a License Is Consumed [#when-a-license-is-consumed] A license is used up when **any** of these happen: 1. The user **successfully completes** the licensed content (or program). 2. The user **reaches the maximum allowed attempts** (where limits apply). 3. The **validity period ends** before completion under that license. After that, they need a **new** license unless another access path still applies. ### Attempt Resets When Starting With a License [#attempt-resets-when-starting-with-a-license] The first **start** with an active, unconsumed license resets attempt counts to the course maximum—even if attempts remained from before. Later starts under the same license do not reset again. Until that first start, remaining attempts may be hidden in **Learn** so the overview does not show the pre-license count. **Programs:** The first start with a **program license** resets attempts only for **inner** content that had already exhausted its limit. Items that still have attempts left are not refilled. ### How Users Receive Licenses [#how-users-receive-licenses] * **Academy purchase** — issued when the order completes (**Stripe integration** or **Manual flow** approval). * **Manual issuance** — from **Users & Groups** or **Manage licenses** in **Academy** (also grants individual visibility). ### Programs and Licenses [#programs-and-licenses] One **program license** covers everything inside. Exhausting attempts on **any** included item can consume the whole program license. Starting content inside a licensed program requires a **program** license—a standalone license for an inner course is not enough. ### Related [#related] * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) * [Sell a Course](/docs/use-cases/sell-a-course) * [Supported Payment Options](/docs/academy/supported-payment-options) * [Visibility in Learn](/docs/learn/visibility) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) # Customize Your Academy (https://docs.skillhabit.com/docs/academy/customizability) ### What This Is For [#what-this-is-for] **Customize** settings control how your Academy **looks and introduces itself**: name, welcome cover (image, title, subtitle), and a longer **About the Academy** description. Workspace-wide branding (logo, company colors) is separate—ask your Skillhabit contact, or see **Configure** branding where your workspace uses it. Checkout **terms & conditions** and seller **Contact** details live under commerce settings after **Activate Commerce**—not on this page. See [Supported Payment Options](/docs/academy/supported-payment-options). ### Who This Is For [#who-this-is-for] Workspace **administrators**. ### Steps [#steps] 1. Open **Academy** → **Manage Academy** → **Customize**. 2. Under **Basics**, set the **Academy name** (placeholder often uses your company name + “Academy”). 3. Under **Welcome section**, add a cover image, **Cover title**, and **Cover subtitle**. Aim for about **2000 × 400** for the cover—see [Recommended Image Dimensions](/docs/reference/file-types#recommended-image-dimensions). 4. Under **About the Academy**, write what the Academy offers and who it is for. 5. **Save changes**. Some workspaces also see options to **Hide filters** or **Hide search** on the catalog (simplified Academy layouts). ### Related [#related] * [Collections](/docs/academy/collections) * [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) * [Supported Payment Options](/docs/academy/supported-payment-options) * [Academy Notifications](/docs/academy/notifications) # Academy (https://docs.skillhabit.com/docs/academy) ### What This App Is For [#what-this-app-is-for] **Academy** is your organization’s **storefront**: the place people **discover**, **request**, **purchase**, or **open** learning products. After someone enrolls (free, paid, or approved), they usually take that content in **Learn**—their day-to-day library. Academy is **optional** for learning and certification programs. Many teams run mandatory tracks and certificates with **Create**, **Learn**, and **Certificates** only—and add Academy when they need a public or paid catalog. Mixing up the storefront with the library—or **catalog visibility** with **licenses**—is the most common Academy setup mistake. | | **Academy (storefront)** | **Learn (library)** | | ----------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | | **Question it answers** | What can people **browse, buy, or request**? | What can I **see and take** day to day? | | **What it does** | Lists products, runs checkout / approval, issues licenses on paid orders | Shows content you already have access to and launches courses, programs, and more | | **What it does not do** | Replace group or individual visibility rules on its own | Sell or approve catalog products (that stays in Academy) | Two more ideas that sound alike but are **not** the same: | | **Workspace Academy visibility** | **Product availability** (**Academy Visibility**) | | ----------------------- | ------------------------------------- | ----------------------------------------------------------------------- | | **Question it answers** | Who can open the **Academy catalog**? | How do people get **this one product**? | | **Where you set it** | **Manage Academy** → **Visibility** | **Create** (or **Manage Academy** → **Content**) on each published item | **Content licenses** sit **on top of** Learn visibility for **paid** products. They do not replace visibility. Details: [Content Licenses](/docs/academy/content-licenses) and [Visibility in Learn](/docs/learn/visibility). ### Who This Is For [#who-this-is-for] Workspace **administrators** configure the storefront (**Manage Academy**). Content creators turn on **Academy Visibility** in **Create**. Learners browse, enroll, and buy; they take content in **Learn**. ### Pick a Guide [#pick-a-guide] * **[Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability)** — who sees the catalog vs how each product is offered (**Public**, **Available** / **Users**, **Purchase**, **Approval**) * **[Public Content](/docs/academy/public-content)** — anonymous access via **product link** (with or without a public catalog) * **[Supported Payment Options](/docs/academy/supported-payment-options)** — **Activate Commerce**, **Stripe integration**, **Manual flow** * **[Content Licenses](/docs/academy/content-licenses)** — time-bounded paid access on top of visibility * **[Collections](/docs/academy/collections)** — group and pin catalog sections * **[Customize Your Academy](/docs/academy/customizability)** — name, welcome cover, about text * **[Academy Notifications](/docs/academy/notifications)** — receipts, free enrollment confirmations, admin order emails * **[Programs With a Learning Journey Map](/docs/academy/programs-with-a-learning-journey-map-in-the-academy)** — journey maps when a program is an Academy product ### Where to Click First [#where-to-click-first] 1. Open the **Academy** app. 2. Choose **Manage Academy** (administrators). 3. Start with **Visibility** (who sees the catalog), then **Content** (which products are listed), then **Payment** after **Activate Commerce** if you sell. On a product page you already own, open **More options** → **Remove this content from the library.** to hide it from your **Learn** library without deleting the Academy listing. ### Quick Examples [#quick-examples] * “Employees should browse an internal catalog; partners only get a URL.” → Keep the catalog signed-in (or admin-only), set the partner course to **Public**, share the **product link**—see [Public Content](/docs/academy/public-content). * “We sell a course with Stripe and want access for one year.” → [Supported Payment Options](/docs/academy/supported-payment-options), then [Content Licenses](/docs/academy/content-licenses). * “End to end: publish, list, pay, share.” → [Sell a Course](/docs/use-cases/sell-a-course). ### Related [#related] * [Sell a Course](/docs/use-cases/sell-a-course) * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) * [Visibility in Learn](/docs/learn/visibility) * [Share Link](/docs/create/share-link) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) # Academy Notifications (https://docs.skillhabit.com/docs/academy/notifications) ### What This Is For [#what-this-is-for] Academy sends a few **commerce- and enrollment-related** messages and in-app confirmations when people buy or add catalog content. This is separate from workspace-wide email settings in **Configure** (for example **New Content Notification** for other assignment flows). ### Who This Is For [#who-this-is-for] Administrators configuring who gets order emails; learners who purchase or enroll from Academy. *** ### Purchase Receipt (Stripe) [#purchase-receipt-stripe] After a **Stripe** purchase completes, Skillhabit shows a thank-you dialog and sends a **receipt** to the email address provided at checkout (order number included). Learners can continue to **Learn** (**Go to library**). **Manual flow** orders complete when an administrator approves them—confirm your workspace’s email behavior after approval if you rely on receipts for those sales. ### Free Content Added to the Library [#free-content-added-to-the-library] When a signed-in user enrolls in **free** Academy content (for example **Available** / **Users** or signed-in **Public** enrollment), they see a confirmation that new content was **added to their learning library**, with a path into **Learn**. ### Admin Order Notifications [#admin-order-notifications] Under **Manage Academy** → **Payment** → **Order Notifications**, select **Administrators** who should receive email when a new **paid** order is created. Search by name or email, then **Save changes**. * Only **paid** orders trigger these emails—**free** orders do not. * If no recipients are selected, Skillhabit does not send unexpected order-notification mail. Commerce must be active first—see [Supported Payment Options](/docs/academy/supported-payment-options). ### Related Workspace Email [#related-workspace-email] Assignment and mandatory-content mail is configured elsewhere (for example **Create** enrollment settings and **Configure** → notifications). Do not expect Academy order settings to control those. ### Related [#related] * [Supported Payment Options](/docs/academy/supported-payment-options) * [Public Content](/docs/academy/public-content) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Sell a Course](/docs/use-cases/sell-a-course) # Programs With a Learning Journey Map (https://docs.skillhabit.com/docs/academy/programs-with-a-learning-journey-map-in-the-academy) ### What This Is For [#what-this-is-for] Some **programs** use a **learning journey map** (hotspots on a background image) instead of only a linear list. When that program is an Academy product—including external or public Academy experiences where your organization uses them—learners can follow the same map ideas in the Academy participation flow. Core journey-map behavior in the library is documented under [Programs](/docs/learn/programs). This page covers what changes when the program is offered through **Academy**. ### Who This Is For [#who-this-is-for] Administrators offering mapped programs in the catalog; learners taking those programs from Academy (signed in or, for **Public** programs, anonymously via **product link**). ### What Learners See [#what-learners-see] * From the program overview, learners may see the journey **directly on the page** or open a **journey map** (or similarly labeled) view for a fuller experience—depending on how your workspace presents the catalog. * The same ideas apply as in **Learn**: **hotspots** represent steps (informational-only, or linked to content); **unordered** vs **ordered** hotspots (with **locking** until the learner reaches the correct **index**); on the map, linked hotspots show progress at a glance (**all complete** vs **not all complete**), and learners **open the hotspot** for each item’s detail. * A **short introduction** may appear the first time someone opens the map. ### Public and Signed-In Paths [#public-and-signed-in-paths] For **Public** programs, anonymous visitors with the **product link** can follow the map experience where enabled; signed-in users use the normal program flow and take owned content in **Learn** after enrollment. If the whole Academy is public, catalog visitors can also discover the program in the storefront. Completion rules, certificates, and **program licenses** still follow your content and Academy settings—see [Content Licenses](/docs/academy/content-licenses) and [Public Content](/docs/academy/public-content). ### Related [#related] * [Programs](/docs/learn/programs) * [Public Content](/docs/academy/public-content) * [Content Licenses](/docs/academy/content-licenses) * [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) # Public Content (https://docs.skillhabit.com/docs/academy/public-content) ### What This Is For [#what-this-is-for] **Public** Academy availability lets people take a product **without registering**, using that item’s **product link**. You **do not** need a **public Academy** (anonymous catalog browsing) for this. Catalog visibility and product availability are separate—see [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). Typical uses: promotional modules, partner training, or any flow where you distribute a direct URL rather than sending people to a browsable storefront. ### Who This Is For [#who-this-is-for] Administrators and content creators who share open courses; learners who open a **product link** (anonymous or signed in). ### Before You Start [#before-you-start] * The content must be **published**. * Turn on **Academy Visibility** and set availability to **Public** in **Create**, or under **Manage Academy** → **Content** → **Visibility and access**. * Copy the **product link** from those settings (or use **Share link** with the **Academy** destination in **Create**). ### Public Product vs Public Catalog [#public-product-vs-public-catalog] | Setup | What anonymous people can do | | ------------------------------------------------------------------------ | ---------------------------------------------------------------- | | Product **Public**, workspace Academy **not** open to anonymous browsing | Open **only** that item via its **product link**—no full catalog | | Product **Public**, workspace has a **public Academy** | Same product link **plus** discovery in the anonymous catalog | When the catalog is private, only people with the **product link** can open that public item anonymously. *** ### Behavior for Anonymous vs Signed-In Users [#behavior-for-anonymous-vs-signed-in-users] #### Anonymous Users (via Product Link) [#anonymous-users-via-product-link] * Can access and complete the content without signing up. * Do **not** receive a certificate upon completion. * Progress is tracked anonymously. Statistics are limited to totals for starts, completions, and failures. #### Signed-In Users [#signed-in-users] * From the Academy catalog, a **product link**, or an older anonymous participation URL, signed-in users are routed to the standard **Academy product page** (not the anonymous-only experience). * They add the item to their **Learn** library through the same **free enrollment** flow as other free Academy products (**Start in your library** / similar), then take the content in **Learn**. * **Do** receive a certificate upon completion when your content settings allow it. * Progress and results appear in **Analyze** like any other owned content. *** ### Analytics for Public Content [#analytics-for-public-content] Anonymous progress is **not** tied to an account, so analytics stay aggregated. In **Analyze** → **Content statistics**, you see totals for starts, completions, and failures. For signed-in users, detailed analytics work as usual. ### Related [#related] * [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) * [Share Link](/docs/create/share-link) * [Sell a Course](/docs/use-cases/sell-a-course) # Supported Payment Options (https://docs.skillhabit.com/docs/academy/supported-payment-options) ### What This Is For [#what-this-is-for] **Payment options** control how customers **pay for Purchase products** in Academy: card (and related) checkout through **Stripe integration**, or admin-handled **Manual flow**. This page is about **commerce setup**. It is **not** the same as: * **Approval** availability (manager approves free access)—see [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) * **Content licenses** (time-bounded access after a paid order)—see [Content Licenses](/docs/academy/content-licenses) ### Who This Is For [#who-this-is-for] Workspace **administrators**. Connecting Stripe may also involve whoever owns your Stripe account. Commerce must be unlocked for the workspace before **Activate Commerce** succeeds—contact Skillhabit if the button stays locked. ### Before You Start [#before-you-start] * Confirm Skillhabit has enabled Academy payments for your workspace (feature unlock). * Decide whether you will use **Stripe integration** or **Manual flow** (only **one** payment solution can be active at a time). * For paid catalog items, set product availability to **Purchase** and a price greater than zero. *** ### Activate Commerce [#activate-commerce] 1. Open **Academy** → **Manage Academy**. 2. Choose **Activate Commerce**. 3. Confirm **Continue**. Activating commerce lets you set prices and accept real payments for content in this Academy. 4. Open **Manage Academy** → **Payment** to choose a payment solution and related checkout settings. Until commerce is active, **Payment**, **Order History**, and **Contact** stay unavailable in the Manage Academy sidebar. *** ### Choose a Payment Solution [#choose-a-payment-solution] Under **Manage Academy** → **Payment** → **Payment solutions**: | Solution | What happens | Best when | | ---------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | | **Stripe integration** | Connect your Stripe account to accept card payments and other Stripe-supported methods. | You want automated online checkout. | | **Manual flow** | Customers place an order; administrators **approve and complete** it before access is granted. | Custom invoices or offline payment arrangements. | Only one solution can be active. If Stripe is linked, unlink it before switching back to **Manual flow**. > **Note**: The default revenue share for sales facilitated through Skillhabit is **20%**, but this can vary based on the terms in your contract. ### Related Payment Settings [#related-payment-settings] On the same **Payment** page you can also configure: * **Order Notifications** — which administrators get email when a new **paid** order is created * **VAT percentage** — rate used for product pricing (decimals supported) * **Custom terms & conditions** — text customers accept at checkout * Custom messages when checkout is blocked or a payment is declined Seller **Contact** details (name, email, address, VAT ID) live under **Manage Academy** → **Contact** after commerce is active. ### Manager Approval Is Not a Payment Method [#manager-approval-is-not-a-payment-method] **Approval** product availability lets users **request** free access for a manager to approve. Configure that on the product—not under **Payment**. See [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). ### Related [#related] * [Content Licenses](/docs/academy/content-licenses) * [Academy Notifications](/docs/academy/notifications) * [Sell a Course](/docs/use-cases/sell-a-course) * [Customize Your Academy](/docs/academy/customizability) # Academy Catalog Visibility vs Product Availability (https://docs.skillhabit.com/docs/academy/workspace-academy-visibility-vs-product-availability) ### What This Is For [#what-this-is-for] Academy access works at **two levels**. They are independent: you can offer **public products** (anonymous access via a link) **without** opening the whole Academy catalog to everyone. | Level | Question it answers | Where you set it | | ------------------------------------------------- | ---------------------------------------------- | ----------------------------------------------- | | **Workspace Academy visibility** | Who can open the **Academy app / catalog**? | **Manage Academy** → **Visibility** | | **Product availability** (**Academy Visibility**) | How do people get **this one published item**? | **Create**, or **Manage Academy** → **Content** | Unsure which dial to turn? Use the table above first—then the sections below. ### Who This Is For [#who-this-is-for] Workspace **administrators** (catalog settings) and content creators who enable **Academy Visibility** on published courses, SCORM packages, meetups, or programs. *** ### Workspace Academy (Catalog) [#workspace-academy-catalog] By default, the workspace **Academy is only visible to administrators**, so you can prepare products and collections before launch. In **Academy**, open **Manage Academy** → **Visibility**: * **The Academy is visible to all signed-in users** — when enabled, everyone in your workspace can open the Academy app and browse. When disabled (default), only administrators see the catalog. * **Use the Academy as the workspace landing page** — when enabled (requires the option above), visitors see the Academy instead of the usual sign-in page. They can browse available content and sign in or create an account when they need access to restricted items. * **Show all items on the front page** — when enabled, every Academy item appears on the front page; when disabled, the front page focuses on **collections** (items remain findable via search). A **public Academy** (anonymous catalog browsing) is an optional workspace capability Skillhabit enables for some accounts. Many organizations keep the catalog private for employees while still distributing individual courses via **product links**. *** ### Per-Product Availability (Academy Visibility) [#per-product-availability-academy-visibility] On each **published** item, turn on **Academy Visibility**, then choose how people may access that product: | Availability | Who can access | Typical use | | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | | **Public** | Anyone with the **product link** can start **without an account** (anonymous participation). **Signed-in** users add the item to their **Learn** library (free enrollment) and take it in **Learn**—not the anonymous-only path. | Promotional or open courses shared by URL, email, or QR code. | | **Available** / **Users** (free) | Signed-in users with an account can enroll. In **Create** this option is labeled **Available**; in **Manage Academy** → **Content** (**Visibility and access**) it may appear as **Users**. | Internal catalog items that require login but no payment. | | **Purchase** | Paid enrollment (**Stripe integration** or **Manual flow**, depending on setup). | Paid training sold through the Academy. | | **Approval** | Users request access; managers approve. | Controlled free access—not a payment method. | | **Unavailable** | Not offered in the Academy (**Academy Visibility** off / removed). | Learn-only or draft items. | **Public products when the Academy catalog is private:** You can still set a product to **Public**. Anonymous learners **do not** see the full Academy catalog—they reach that content only through its **product link** (shown in **Create** and in Academy product settings as **Product link**). Copy the **product link** to share in campaigns, embed on a website, or use with **Share link** (Academy destination) in **Create**—see [Share Link](/docs/create/share-link) and [Public Content](/docs/academy/public-content). ### Catalog vs Licenses (Short Reminder) [#catalog-vs-licenses-short-reminder] | Goal | Go Here | | ----------------------------------------------------------------- | -------------------------------------------------- | | Who can browse the Academy app | This page → **Workspace Academy** | | How people enroll in one product | This page → **Per-Product Availability** | | Time-bounded paid access after they can see the item in **Learn** | [Content Licenses](/docs/academy/content-licenses) | | What appears in the learner’s library | [Visibility in Learn](/docs/learn/visibility) | ### Related [#related] * [Public Content](/docs/academy/public-content) * [Supported Payment Options](/docs/academy/supported-payment-options) * [Content Licenses](/docs/academy/content-licenses) * [Sell a Course](/docs/use-cases/sell-a-course) * [Share Link](/docs/create/share-link) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) # Content Statistics (https://docs.skillhabit.com/docs/analyze/content-statistics) ### What This Is For [#what-this-is-for] **Content statistics** shows how each content item is performing across learners—counts by status, and for built-in courses, question-level detail. Use this tab when you care about the **content** (hard questions, weak chapters, public usage), not a specific person’s full timeline. For per-person rows, filters, and reminders, use [Progressions](/docs/analyze/progressions) (**User results**). ### Who This Is For [#who-this-is-for] * **Administrators** — all content * **Creators and collaborators** with **Analyze** access — content they created or collaborate on Managers primarily use **User results** for people in their groups. Content statistics still follows content ownership / collaborator scope when you have access. ### Before You Start [#before-you-start] * You need **Analyze** app access. * Creators and collaborators only see content they’re tied to in **Create**. * For public / Academy anonymous usage, the content must be published as public content—see [Public Content](/docs/academy/public-content). *** ### Browse the Content List [#browse-the-content-list] 1. Open **Analyze**. 2. Select **Content statistics** (next to **User results**). 3. Use **Search content** to narrow the list. 4. Each row shows the content name, type, a results count, and a status bar for **Not started**, **In progress**, **Approved**, **Failed**, and **Expired**. Empty states: * **No content to analyze** — nothing is in scope for you yet * **No results found** — adjust the search *** ### Open Content Details [#open-content-details] 1. Click a row to open **Content details**. 2. What you see depends on the content type. #### Built-In Courses [#built-in-courses] * **Question statistics** by chapter: response counts, correct vs incorrect rates, and survey breakdowns * Use this to find questions people miss often or survey themes across the group #### SCORM [#scorm] * Appears in the list with progression counts * Details do **not** include answer-level analytics (**SCORM packages don't support reviewing answers**) #### Meetups [#meetups] * **Meetup overview** with progression counts * No question statistics here—inspect participants on **User results** and open a result for **Event history** #### Programs and Other Types [#programs-and-other-types] * Follow the same list pattern where the item appears; drill into linked built-in courses when you need question detail *** ### Public Content [#public-content] When the content is public: * **Public academy statistics** — aggregated usage only (no personal data). Tooltip: public content tracks basic statistics and does not include personal information about users * **All time statistics** — started, approved, failed totals * **Period statistics** — chart for **Last week**, **Last month**, **Last quarter**, or **Last year** Signed-in learners on that content still contribute to the normal detailed analytics where applicable. Anonymous public traffic stays in the public statistics section. *** ### Survey Text Answers [#survey-text-answers] On built-in courses, survey questions appear in **Question statistics**. * Open a survey item to browse free-text answers (search and sort **from newest** / **from oldest**). * **Anonymous survey** responses stay private: Skillhabit needs **at least 3 responses** before individual text is shown. With fewer than three, statistics stay hidden to protect privacy. * Named surveys show participant context when the survey is not anonymous. *** ### Export One Built-In Course [#export-one-built-in-course] From **Content details** on a **built-in course**, use **Export details** for a full per-learner spreadsheet. Requirements and steps: [Exports](/docs/analyze/exports). *** ### Result [#result] You can search content in scope, open **Content details** for question or meetup overview data, read public academy aggregates when relevant, and inspect survey text when enough responses exist. ### Related [#related] * [Exports](/docs/analyze/exports) * [Progressions](/docs/analyze/progressions) * [Public Content](/docs/academy/public-content) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) # Exports (https://docs.skillhabit.com/docs/analyze/exports) ### What This Is For [#what-this-is-for] **Exports** give you Excel reports from **Analyze** when a list on screen is not enough—for compliance packs, offline review, or sharing outside Skillhabit. There are two different exports: | Export | Where | Best when | | ------------------ | ---------------------------------------- | ---------------------------------------------- | | **Export results** | **User results** | Many users and content items after filters | | **Export details** | **Content details** on a built-in course | One course with full per-learner answer detail | They are not interchangeable. A filtered progressions summary will not include every answer on a course; a single-course details export will not cover your whole team’s other content. ### Who This Is For [#who-this-is-for] Anyone who can see the underlying data in **Analyze**—administrators, and managers / creators / collaborators within their normal **Analyze** scope. ### Before You Start [#before-you-start] * Open **Analyze** and confirm you can see the people or content you need. * For **Export results**, set filters first if you only want a subset. * For **Export details**, open a **built-in course** that already has participation (at least one chapter with results). SCORM, meetups, and programs do not offer this button. *** ### Export Results From User Results [#export-results-from-user-results] This is a **summary across many users and content items**, limited to the current filtered list. 1. Open **Analyze** → **User results**. 2. Use **Add filters** until the list matches what you need (same filters as [Progressions](/docs/analyze/progressions)). 3. Click **Export results** (disabled when the list has zero results). 4. In **Export results**, under **What to include in your report**, choose columns and drag them into the order you want. 5. Click **Generate report**. 6. Wait for the snackbar **Your report was generated successfully**, then download (you can **Download again** from that snackbar). #### Columns You Can Include [#columns-you-can-include] Standard fields include (labels as shown in the dialog): * **Username**, **Email**, **Content name**, **Latest status** * **Invited at date**, **Started at date**, **Approved at date**, **Failed at date** * **Expiry date**, **Groups**, **User metadata**, **User last logged in at date** * **Estimated completion time**, **Archived** * Workspace **custom attributes** as extra columns when your workspace uses them Some columns may be required (you can’t turn them off). Manager-only users may not see custom attribute columns in some workspaces—the same rule as the **Attributes** filter on **User results**. The export respects the **same filters** as the list, including **Include archived users?** under **More options**. *** ### Export Details From One Built-In Course [#export-details-from-one-built-in-course] Use this when you need **full per-learner answers** for a single built-in course—not a multi-content summary. 1. Go to **Analyze** → **Content statistics**. 2. Open the course (**Content details**). 3. Click **Export details** in the header. 4. Wait while the file builds (**Downloading ...**), then save the download in your browser. Notes: * **Built-in courses only** — not SCORM, meetups, or programs * The button stays **disabled** until question statistics have participation data (at least one chapter with results) * Generation is asynchronous; keep the dialog open until the download starts For multi-user / multi-content Excel without answer-level detail, use **Export results** above. For a recurring full dump without filters, see the monthly **Subscribe** option on [Progressions](/docs/analyze/progressions). *** ### Which Export Should I Use? [#which-export-should-i-use] | Job | Use | | --------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | “Everyone in Sales who hasn’t finished the safety course” | Filter **User results**, then **Export results** | | “Every answer on Course X for analysis in Excel” | **Content statistics** → course → **Export details** | | “Send me a full progression report every month” | **Subscribe** on unfiltered **User results** ([Progressions](/docs/analyze/progressions)) | *** ### Result [#result] You get an Excel file that matches either your filtered **User results** columns or one built-in course’s detailed learner answers—ready to share or archive outside Skillhabit. ### Related [#related] * [Progressions](/docs/analyze/progressions) * [Content Statistics](/docs/analyze/content-statistics) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) # Analyze (https://docs.skillhabit.com/docs/analyze) ### What Analyze Is For [#what-analyze-is-for] **Analyze** is where you review learning results: who has started or finished assigned content, how each course is performing, and when you need a spreadsheet. The app has two tabs: | Tab | Question it answers | | ---------------------- | --------------------------------------------- | | **User results** | How is each person doing on assigned content? | | **Content statistics** | How is each content item performing overall? | Exports live on those tabs—see [Exports](/docs/analyze/exports). ### Who Uses It [#who-uses-it] * **Administrators** — all user results and all content * **Managers** with **Analyze** access — results for users in the groups they manage ([Managers](/docs/users-and-groups/managers)) * **Creators and collaborators** with **Analyze** access — statistics for content they created or collaborate on Learners do not use **Analyze** for their own progress; they use **Learn** and **Certificates**. ### Pick a Guide [#pick-a-guide] * **[Progressions](/docs/analyze/progressions)** — **User results**: statuses, filters, result details, email reminders, monthly subscription * **[Content Statistics](/docs/analyze/content-statistics)** — engagement counts, question statistics, public content, survey text * **[Exports](/docs/analyze/exports)** — Excel from filtered **User results**, or **Export details** for one built-in course ### Where to Click First [#where-to-click-first] 1. Open **Analyze** from the app launcher. 2. Choose **User results** to follow people, or **Content statistics** to follow content. 3. Use **Add filters** on **User results**, or **Search content** on **Content statistics**. ### Related Use Cases [#related-use-cases] * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # Progressions (https://docs.skillhabit.com/docs/analyze/progressions) ### What This Is For [#what-this-is-for] **Progressions** are the per-person learning results you review in **Analyze**. In the product the tab is labeled **User results**. Use **User results** when you need to answer questions like: * Who in my group has not started mandatory training? * Who failed or whose certificate expired? * What happened on one person’s attempt—answers and history? * Who should get a reminder email from the current filtered list? For how each content item performs overall (not per person), use [Content Statistics](/docs/analyze/content-statistics). For spreadsheets, see [Exports](/docs/analyze/exports). ### Who This Is For [#who-this-is-for] * **Administrators** — all user progressions in the workspace * **Managers** with **Analyze** access — users in the groups they manage (membership-based: all results for those users, not only content assigned through the group). See [Managers](/docs/users-and-groups/managers) * **Collaborators** with **Analyze** access — progress for content they collaborate on ### Before You Start [#before-you-start] * You need **Analyze** app access on your profile ([Users & Groups](/docs/users-and-groups)). * Managers must be assigned to the relevant groups. * Collaborators must be linked to the content in **Create**. * Archived users are **hidden by default**—turn them on only when you need them (steps below). *** ### Open User Results [#open-user-results] 1. Open **Analyze**. 2. Select the **User results** tab (next to **Content statistics**). 3. Review the list heading: **All results** when nothing is filtered, or **Filtered results** when filters are active, plus the total count (**In total**). Each row is one person × one content item: name, email, content, type, status, and the date of the latest status update (with certificate expiry when it applies). *** ### Status Meanings [#status-meanings] Statuses appear as chips on each row and in filters. Exact labels: | Status | Meaning | | --------------- | ---------------------------------------------------------------------------------------- | | **Not started** | The person can see the content in **Learn** but has not begun | | **In progress** | Started; not yet finished successfully | | **Approved** | Completed successfully (a certificate may be issued when the content is set up for that) | | **Failed** | Did not pass; they need to try again | | **Expired** | Certificate expired; the content needs to be retaken | Each row also shows enrollment context on the avatar: * **Mandatory** or **Optional** for that person * **Not enrolled** when they are not enrolled * An archive icon when the user is archived (tooltip: **This user is archived**) Quick chips above the list (**All results**, **Not started**, **In progress**, **Approved**, **Failed**, **Expired**) toggle the same status filters with counts. *** ### Filter Results [#filter-results] 1. Open **Add filters** in the sidebar. 2. Combine any of these (all are multi-select where listed): | Filter | What you pick | | -------------------------- | ----------------------------------------------------------------------------------------------------------- | | **Content** | Search and select content (**Search for content**) | | **Groups** | Search and select groups (**Search for groups**) | | **Users** | Search and select people (**Search for users**) | | **Status** | **Approved**, **In progress**, **Not started**, **Expired**, **Failed** | | **Enrollment** | **Mandatory**, **Optional**, **Not enrolled** | | **Certificate expiration** | Date range for certificate expiry | | **Last status update** | Date range for when the status last changed | | **Attributes** | Workspace custom attributes (when available). Manager-only users may not see this filter in some workspaces | | **More options** | **Include archived users?** — off by default | 3. Use **Clear filters** when you want to reset. 4. The list and total update to match the current filters. Exports and **Email users** use the same filtered set. *** ### Open Result Details [#open-result-details] 1. Click a row to open **Result details**. 2. Check the header: person, content, status, and dates. 3. Use the bottom tabs: #### Review Answers [#review-answers] * **Built-in courses** — chapter and question detail for that learner * **Programs** — linked items in the program; open a dependency to drill into that item’s result * **SCORM** and **meetups** — no answer review here (the empty state explains that) #### Event History [#event-history] A timeline of events for that participation (for example enrolled, started, approved, failed, expired, certificate issued). Useful when you need “what happened when,” not just the latest status. *** ### Email Users From Filtered Results [#email-users-from-filtered-results] Admins and managers can email the **unique recipients** in the current filtered results—handy for overdue mandatory reminders. 1. Set filters so the list shows the people you want. 2. Click **Email users**. 3. Write a **Subject** and **Message**. 4. Optionally open **Preview**, then **Send**. 5. Confirm in **Send email**. You’ll see **Emails sent successfully** when it works. Notes: * The subtitle shows how many unique recipients are in the current search results. * More than **100** recipients are sent in batches (the dialog says so). * If you filtered by **Content**, the message may include links to that content in **Learn** (when your workspace has that option enabled). *** ### Subscribe to Monthly Reports [#subscribe-to-monthly-reports] When **no filters** are applied, you can subscribe to a monthly Excel report of user progression data. 1. On **User results** with filters cleared, open **Subscribe**. 2. Read **About the subscription** — you receive a full report by email on the **first day of each month**. 3. Confirm **Subscribe**. You’ll see **Subscription enabled**. 4. To stop, open **Subscribed** and choose **Unsubscribe**. The **Subscribe** control is hidden while filters are active—clear filters first if you don’t see it. For a one-off spreadsheet of the current list, use [Exports](/docs/analyze/exports) instead. *** ### Result [#result] You can filter people and content to the set you care about, open **Result details** for answers and history, email unique recipients from that set, and optionally receive a monthly full report by email. ### Related [#related] * [Exports](/docs/analyze/exports) * [Content Statistics](/docs/analyze/content-statistics) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) * [Managers](/docs/users-and-groups/managers) * [Users & Groups](/docs/users-and-groups) # Certificates (https://docs.skillhabit.com/docs/certificates) ### What Certificates Is For [#what-certificates-is-for] **Certificates** is the app where you see certificates and attachments you have earned in Skillhabit—browse what is still valid, download PDFs and files, start renewal when something is expiring, and control expiry reminders. Certificates are **issued** when you complete content that has certificate issuance enabled in **Create** (courses, SCORM packages, programs, and meetups). This app is for **holding and renewing** those issued certificates. Authors configure validity and renewal paths in **Create**—those guides are linked below; this section does not repeat authoring setup. ### Who Uses It [#who-uses-it] * **Learners** — everyone who earns certificates and needs to view, download, or renew them * **Administrators** — configure issuance and renewal in **Create**; can also manage a user’s certificates from [Users & Groups](/docs/users-and-groups/users-and-profiles) ### Pick a Guide [#pick-a-guide] | Job | Guide | | ----------------------------------------------------------------------------- | --------------------------------------------------------- | | Find Active vs Expired certificates, filter, and download PDFs or attachments | [View and Download](/docs/certificates/view-and-download) | | Start **Recertify** when a certificate is expired or near expiry | [Renewal](/docs/certificates/renewal) | | Understand reminder email timing and turn notifications on or off | [Notifications](/docs/certificates/notifications) | ### Where to Click First [#where-to-click-first] 1. Open **Certificates** from the app launcher. 2. Use search or **Type** filters if the list is long. 3. Check **Expired certificates** (shown above **Active certificates** when you have any), then your active list grouped by month. 4. Use **Download**, **Recertify**, or the notification icon on a row—see the guides above. ### Related Use Cases [#related-use-cases] * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Take a Course as a Learner](/docs/use-cases/take-a-course) ### Authoring (Create) [#authoring-create] Do not set up certificates here. In **Create**: * [Certificate Configuration](/docs/create/certificate-configuration) — enable issuance, attachments, and recertification * [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) — validity periods and reminder rules for authors * [Advanced Renewal Paths](/docs/create/advanced-renewal-paths) — one content renewing many, category streaks # Notifications (https://docs.skillhabit.com/docs/certificates/notifications) ### What This Is For [#what-this-is-for] Skillhabit can email you when a certificate is nearing expiration so you have time to renew. In **Certificates**, you control those reminders **per certificate** with the notification icon on each row that has an expiry date. ### Who This Is For [#who-this-is-for] Learners who hold certificates that can expire. Authors do not configure the reminder schedule in **Create**—the platform sends reminders on a shared cadence (described below). Authors only set whether certificates expire and how renewal works: [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal). *** ### When Reminders Are Sent [#when-reminders-are-sent] Reminders begin **three months** before the certificate expires. During that window, Skillhabit sends reminder emails on **Wednesdays at 10:00 (GMT+1)** during the **1st and 3rd week of each month**. Timing is approximate: reminders are generated asynchronously across workspaces and may take a while to reach every user. Reminders continue on that cadence until you **renew** the certificate or **turn notifications off** for that certificate. Reminders are **on by default** for certificates that expire. *** ### Turn Notifications On or Off [#turn-notifications-on-or-off] On a certificate row that has an expiry date: 1. Open **Certificates**. 2. Find the certificate under **Active certificates** or **Expired certificates**. 3. Use the notification control on the row: * **Disable notifications** (bell with notifications icon) — stop expiry reminders for that certificate * **Enable notifications** (notifications-off icon) — turn reminders back on The control applies **only to that certificate**, not to every certificate you hold. If a certificate never expires, there is no expiry reminder and no notification toggle for expiry. *** ### Related [#related] * [Certificates](/docs/certificates) * [Renewal](/docs/certificates/renewal) — what to do when a reminder arrives * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) — author validity and the same reminder timing for writers # Renewal (https://docs.skillhabit.com/docs/certificates/renewal) ### What This Is For [#what-this-is-for] **Renewal** (also called **recertification**) is how you keep a certificate valid after its validity period ends—or before it expires. You start from **Certificates** with **Recertify**, then complete the renewal content authors configured in **Create**. Renewal is **not** automatic when the date passes. You must finish the configured path (or an administrator can renew the certificate on your profile in **Users & Groups**). Authors set validity and which content renews the certificate. That setup lives in **Create**—see the links at the end. This page covers the **learner** path in **Certificates**. ### Who This Is For [#who-this-is-for] Learners who hold an expiring or expired certificate. Administrators configure paths in **Create** and may renew or edit certificates under [Users & Groups](/docs/users-and-groups/users-and-profiles). ### Before You Start [#before-you-start] * The certificate must allow renewal: authors turned on **Activate recertification** (or an equivalent renewal path such as a category streak) on the content. * You should have email reminders on unless you silenced them—see [Notifications](/docs/certificates/notifications). * Job-shaped overview: [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate). *** ### When Recertify Appears [#when-recertify-appears] **Recertify** shows on a certificate row when **both** are true: 1. Renewal content is configured for that certificate, **and** 2. The certificate is **expired**, or it **expires within about the next 90 days** (roughly the same three-month window as reminder emails) If there is no renewal path, or the certificate is still more than about three months from expiry, you see **Download** instead of **Recertify**. *** ### Steps to Renew From Certificates [#steps-to-renew-from-certificates] 1. Open **Certificates**. 2. Find the certificate under **Expired certificates** or **Active certificates** (near-expiry items stay under Active until the date passes). 3. Click **Recertify**. 4. In the **Renew Certificate** dialog (wording can vary if you are restarting the same content), review the renewal content, then confirm to continue. 5. Complete that content in **Learn** (course, SCORM, program, or meetup path as configured). 6. When you finish successfully, the certificate renews (or is replaced, depending on author settings). Return to **Certificates** to confirm the new dates. If renewal targets a **program** and starting again would reset progress, the dialog can warn you before you confirm—read that message carefully. *** ### Program Inner Content and Learn Visibility [#program-inner-content-and-learn-visibility] Visibility in **Learn** and renewal access are separate. If you earned a certificate from content you only completed **inside a program**—so that item never appeared as its own row in **Learn**—you can still renew. Your **issued certificate** unlocks the configured **recertification** content from **Certificates** and renewal flows **without** needing standalone **Learn** visibility for that renewal item. Full rules: [Visibility in Learn](/docs/learn/visibility). Author-side note: [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal). *** ### Other Ways Renewal Can Happen [#other-ways-renewal-can-happen] | Path | When to use it | | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | **Certificates** → **Recertify** | Standard learner path (this page) | | Assigned / visible content in **Learn** | You open the renewal content directly if it already appears in your library | | **Users & Groups** (administrator) | Manual renew, issue, or delete on a user’s profile | | Advanced author paths | One refresher renews several certificates, or **category streaks**—[Advanced Renewal Paths](/docs/create/advanced-renewal-paths) | *** ### Related [#related] * [Certificates](/docs/certificates) * [View and Download](/docs/certificates/view-and-download) * [Notifications](/docs/certificates/notifications) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) * [Advanced Renewal Paths](/docs/create/advanced-renewal-paths) * [Visibility in Learn](/docs/learn/visibility) # View and Download (https://docs.skillhabit.com/docs/certificates/view-and-download) ### What This Is For [#what-this-is-for] Use **Certificates** to see what you have earned, tell **active** certificates from **expired** ones, and download the certificate PDF plus any attachments authors attached in **Create**. ### Who This Is For [#who-this-is-for] Anyone with certificates in the workspace (typically learners). Administrators managing certificates on a profile use [Users & Groups](/docs/users-and-groups/users-and-profiles) instead. ### Before You Start [#before-you-start] * You need at least one issued certificate. Complete content that issues a certificate in **Learn** (or finish a meetup once attendance is approved in **Follow Up**). * If the list is empty, **Certificates** shows that you have none yet and offers **Go to Learn**. *** ### How the List Is Organized [#how-the-list-is-organized] The app is **not** tabbed. When you have certificates in both states, you see two sections on one page: | Section | What it shows | | ------------------------ | --------------------------------------------------------------- | | **Expired certificates** | Certificates past their expiry date (listed first when present) | | **Active certificates** | Certificates that are still valid | Within each section, rows are grouped by **month**: * **Active** — by **issue** month (newest months first) * **Expired** — by **expiry** month (newest months first) Each row shows the content name and type (course, SCORM, program, or meetup), plus dates: * **Active** — issued date, and expiry date when the certificate can expire * **Expired** — the date it expired Open a row to see the related content overview (same pattern as elsewhere in Skillhabit). *** ### Filter and Search [#filter-and-search] At the top of **Certificates**: 1. Search by **content name**. 2. Filter by **Type**: **Course**, **Meetup**, or **Program**. Choosing **Course** also includes SCORM certificates. 3. Clear filters if you see **No results found** and expected certificates disappear. *** ### Download a Certificate or Attachment [#download-a-certificate-or-attachment] On a certificate row where **Download** is available: 1. Open **Download** (the control may show a count badge: the certificate itself plus any attachments). 2. Choose **Certificate** to generate and download the PDF. Skillhabit may show **Generating your Certificate…** for a few seconds, then download the file. 3. If authors added attachments, choose an attachment name from the same menu to download that file. **When Download is hidden:** If the row shows **Recertify** instead (certificate expired or within about three months of expiry, and renewal content is configured), the download menu is not on that row. Renew first if you need a fresh certificate after completing renewal, or wait until **Recertify** no longer applies to that row. Details: [Renewal](/docs/certificates/renewal). If generation fails, confirm you still have a valid result for that content, then try again from **Certificates**. *** ### Related [#related] * [Certificates](/docs/certificates) * [Renewal](/docs/certificates/renewal) * [Notifications](/docs/certificates/notifications) * [Certificate Configuration](/docs/create/certificate-configuration) — how authors enable certificates and attachments # Allowed Domains for Account Creation (https://docs.skillhabit.com/docs/configure/allowed-domains-for-account-creation) ### What This Is For [#what-this-is-for] **Approved for Sign Up** (also called allowed email domains) lists which email domains may **register automatically on first login**. In **Configure**, under **Control User Access and Attributes**, open **Approved for Sign Up** to add domains such as `company.com`. Users whose email matches a listed domain are created the first time they complete a qualifying sign-in. ### Who This Is For [#who-this-is-for] Workspace **administrators**. ### How It Works [#how-it-works] 1. Open **Configure** → **Approved for Sign Up**. 2. Choose **Add Email Domain** and add each domain people may use to self-register (for example `acme.com`). 3. Test with a new email on that domain. Optional: turn on **Allow all e-mail domains** if every address should be able to self-register on first login. That disables adding a curated list while the switch is on—use with care. This applies when someone signs in with: * **Magic Links** — first successful link for a new address on an approved domain creates the account * **Microsoft** — first successful Microsoft sign-in creates the account when the email Skillhabit picks from the profile is on an approved domain It does **not** replace OpenID Connect’s separate auto-create switch under **More options**. Admin invites, the External API, SCIM, Entra sync, and registration pages can still create accounts regardless of this list. Full sign-in behavior: [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). How Skillhabit picks the email from Microsoft: [SSO and Email Addresses](/docs/configure/sso-and-email). ### Related [#related] * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [Introduction](/docs/external-identity-providers) — provisioning vs sign-in * [Login Methods](/docs/configure/login-methods) * [Registration Pages](/docs/configure/registration-pages) # API Keys (https://docs.skillhabit.com/docs/configure/api-keys) ### What This Is For [#what-this-is-for] **API Credentials** (API keys) let an external system call Skillhabit on behalf of your workspace—without using a person’s login. Use them for the **External API** and, when Skillhabit has enabled it, **SCIM** provisioning. In the product: **Configure** → **Connections** → **API Credentials**. You can have up to **three** active keys. The External API capability must be enabled for your account—contact Skillhabit if the tab shows that the feature is not available. ### Who This Is For [#who-this-is-for] Workspace **administrators** and integration developers. Treat every key like a password. ### What You Can Use Them For [#what-you-can-use-them-for] | Use | Guide | | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | **External API** — create or update users, manage visibility, list courses, create sign-in links, and more | [External API](/api-reference) · user lifecycle also under [User Provisioning](/docs/external-identity-providers/user-provisioning) | | **SCIM provisioning** — IdP pushes users into Skillhabit | [User Provisioning](/docs/external-identity-providers/user-provisioning) | The key alone does **not** turn SCIM on. Ask your Skillhabit representative to enable SCIM first. Sign-in methods for people are separate—see [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). ### How to Create a Key [#how-to-create-a-key] 1. Open **Configure** → **Connections** → **API Credentials**. 2. Choose **Create credential**. 3. When the token appears, **copy or download it immediately**. This is the only time Skillhabit shows the full secret. 4. Store it in a password manager or vault used by your backend only. 5. Send requests with an Authorization header: `Authorization: Bearer {token}`. If you already have three keys, delete one before creating another. ### Delete a Key [#delete-a-key] From the credentials list, delete a credential you no longer need. Anything still using that token will stop authenticating. ### Related [#related] * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [External API](/api-reference) * [Webhooks](/docs/configure/webhooks) * [Configure](/docs/configure) # Auto Archive (https://docs.skillhabit.com/docs/configure/auto-archive) ### What This Is For [#what-this-is-for] **Auto Archive** archives people who have not been active for a period you choose, and can later **delete** archived accounts after a second delay. The same settings dialog also controls **Login Session Duration**—how long newly issued login sessions stay valid. In the product: **Configure** → **User Management** (under **Control User Access and Attributes**). A user counts as inactive when they have not logged in or interacted with the platform within the archive period. ### Who This Is For [#who-this-is-for] Workspace **administrators** responsible for license hygiene and account lifecycle. ### Before You Start [#before-you-start] * Decide whether archived accounts should ever be deleted automatically. * Pick administrators who should get deletion warnings if you enable auto-deletion. * Related email templates (**User Archived Soon Notification**, **User Archived Notification**) live under [Email Notifications](/docs/configure/notifications). ### Login Session Duration [#login-session-duration] Under **Login Session Duration**, choose how long newly issued sessions stay valid: **1 day**, **1 week**, **1 month**, **6 months**, or **12 months**. This is independent of Auto Archive. Shorter sessions matter more on shared devices—see also logout links under [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). ### Set Up Auto Archive [#set-up-auto-archive] 1. Open **Configure** → **User Management**. 2. Under **Auto Archive**, pick a preset (**Archive after N days**) or **Custom number of days**, or leave **Disabled**. 3. If Auto Archive is on, optionally enable **Auto Deletion**: delete archived accounts after a set number of days (or a custom value). Deleted accounts cannot be restored. 4. If deletion is on, under **Deletion Notifications** select administrators who should be notified **3 days before** archived users are deleted. 5. Save. ### What Happens After Archive [#what-happens-after-archive] * Archived users **cannot log in**. * An administrator can **unarchive** them in **Users & Groups** before any deletion period expires. * Optional emails can warn the user before archive and confirm after archive—configure copy and toggles in [Notifications](/docs/configure/notifications). ### Related [#related] * [Notifications](/docs/configure/notifications) * [Users & Groups](/docs/users-and-groups) * [Configure](/docs/configure) # Customization (https://docs.skillhabit.com/docs/configure/branding) ### What This Is For [#what-this-is-for] **Customization** is how your workspace presents your organization: company name on communications, logo, brand colors, and (optionally) a custom font. In the product this lives under **Configure** → **Customization** (under **Customize Your Workspace**). The same dialog also holds the [welcome message for Home](/docs/configure/welcome-banner)—this page covers the brand and color settings only. ### Who This Is For [#who-this-is-for] Workspace **administrators** who own how Skillhabit looks for learners and staff. ### What You Can Set [#what-you-can-set] | Area | UI labels | Effect | | -------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Basics** | **Company name**, **Custom font** | Company name appears as the sender for workspace communications. Custom font applies across the platform except in emails; choose from the listed Google Fonts. | | **Brand logo** | Logo image, **Brand background color** | How your brand appears in the workspace; the background color sits behind the logo. | | **Colors** | **Primary color**, **Secondary color** | Primary for main buttons and key elements; secondary for secondary buttons and elements. The color pickers check contrast. | ### How to Update Branding [#how-to-update-branding] 1. Open **Configure**. 2. Under **Customize Your Workspace**, open **Customization**. 3. Set **Company name** and, if you want, **Custom font**. 4. Under **Brand logo**, upload your logo and set **Brand background color**. 5. Under **Colors**, set **Primary color** and **Secondary color**. 6. Close the dialog when you are done—changes apply to the workspace look and feel. ### Tips [#tips] * Keep primary and secondary colors readable on light UI chrome; use the contrast check in the picker. * Emails do **not** use your custom font—template text still follows [Email Notifications](/docs/configure/notifications). * Logo and welcome image are separate uploads (welcome image is under **Welcome message** in the same dialog). * Aim for about **2000 × 300** for the brand logo strip—see [Recommended Image Dimensions](/docs/reference/file-types#recommended-image-dimensions). ### Related [#related] * [Welcome Banner](/docs/configure/welcome-banner) * [Custom Domains](/docs/configure/custom-domain) — branded URL and sender domain * [Configure](/docs/configure) # Custom Attribute Fields (https://docs.skillhabit.com/docs/configure/custom-attribute-fields) ### What This Is For [#what-this-is-for] **Attributes** are custom data points on user profiles. Use them to store extra information, collect values at registration, and drive **smart groups**. In the product the settings card is labeled **Attributes** (**Configure** → under **Control User Access and Attributes**). Docs still use **Custom Attribute Fields** as the page title. You can create up to **20** attributes per workspace. ### Who This Is For [#who-this-is-for] Workspace **administrators** who design profile data and group rules. Often coordinated with whoever builds registration pages or IdP mappings. ### Field Types [#field-types] | Type | UI label | Behavior | | --------------- | ----------------- | ---------------------------------- | | Single choice | **Single Select** | Preset list; user picks one | | Multiple choice | **Multi Select** | Preset list; user may pick several | | Free text | **Text** | Any text up to **500** characters | For select types you manage **Field choices** (add, import, sort, remove). ### Accessibility [#accessibility] Each attribute has **Attribute accessibility**: | Setting | Meaning | | ------------ | ------------------------------------------- | | **Required** | Visible; the person must set a value | | **Optional** | Visible; editable | | **Locked** | Visible; not editable | | **Hidden** | Not visible and not editable on the profile | Registration pages can still collect or set values for attributes with different accessibility at signup—see [Registration Pages](/docs/configure/registration-pages). ### Changing Attribute Type [#changing-attribute-type] Saving a change to an attribute’s type **clears every user’s current value** for that attribute. When you change a **Single Select** or **Multi Select** attribute to a **different** type, **Configure** asks you to confirm before saving. You **cannot** switch to **Text** while the attribute is referenced by a **smart group** rule. Plan type changes carefully—especially for attributes used in smart groups. ### How to Add an Attribute [#how-to-add-an-attribute] 1. Open **Configure** → **Attributes**. 2. Choose **Add Attribute**. 3. Enter **Field name** (and optional **Field description**). 4. Set **Attribute type** and **Attribute accessibility**. 5. For select types, add at least two choices (or import a list). 6. Create the attribute. Edit or delete attributes from the same list. ### Map Directory Attributes Onto Skillhabit Attributes [#map-directory-attributes-onto-skillhabit-attributes] When Entra, OpenID Connect, or SCIM should fill profile attributes, configure mappings under **Configure** → **Connections** → **Attribute mappings**—not on this Attributes list alone. You map a **source** (OpenID Connect claim, Microsoft Entra property, or SCIM attribute) onto an **existing** Skillhabit attribute. For **Single Select** / **Multi Select**, choose whether unknown IdP values **Match existing only** or **Create if missing**. Full steps and behavior: [User Provisioning → Map Directory Attributes](/docs/external-identity-providers/user-provisioning#map-directory-attributes-onto-skillhabit-attributes).\ Release the field from Entra, Okta, Auth0, or SCIM first: [Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens). ### Related [#related] * [Registration Pages](/docs/configure/registration-pages) * [Smart Groups](/docs/users-and-groups/smart-groups) * [Users & Groups](/docs/users-and-groups) * [User Provisioning](/docs/external-identity-providers/user-provisioning) — directory sync and attribute mappings * [Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens) * [Configure](/docs/configure) # Custom Domains (https://docs.skillhabit.com/docs/configure/custom-domain) ### What This Is For [#what-this-is-for] **Custom Domains** let you host the workspace on your own hostname (for example `learning.yourcompany.com`) instead of the default Skillhabit domain, and optionally send platform email from your brand’s domain. In the product: **Configure** → **Custom Domains** (under **Connect Your Workspace**). Your workspace needs the custom domains capability—ask Skillhabit if the card is missing or disabled. Platform (app) and email domains are configured on the same domain entry but can be enabled independently. ### Who This Is For [#who-this-is-for] Workspace **administrators**, usually working with whoever manages DNS for your domain. ### Before You Start [#before-you-start] * Know where DNS is managed (registrar or DNS host such as Cloudflare). * Prefer a hostname you control (often a subdomain). Do not change the apex/`yourcompany.com` record unless your DNS team instructs you to. * Have access to add **CNAME** / **TXT** (and related) records Skillhabit shows you. *** ### Platform Domain (App URL) [#platform-domain-app-url] #### Steps [#steps] 1. Open **Configure** → **Custom Domains**. 2. Choose **Connect New Domain**, enter the domain name (for example `learning.yourcompany.com`), and add it. 3. Open the domain. Under **Platform Domain**, enable it if needed, then add the DNS records Skillhabit lists. 4. Use **Verify** when DNS is ready. Propagation is often minutes but can take longer (up to days depending on TTL/cache). Verification keeps retrying until it succeeds. 5. Under **SSL configuration**, choose: * **Default Certificate** — free certificate from Let’s Encrypt (DNS must validate first), or * **Custom SSL** — upload your own certificate. 6. When status is **Ready** and SSL is active, **Activate** the platform domain. #### How Redirects Work [#how-redirects-work] * After activation, visitors on the default Skillhabit domain are redirected to your custom domain. They are signed out on the old domain first; the redirect carries a login token so the custom domain can sign them back in. * Email notification and invitation **links keep using the default domain** in the URL. Clicking them still lands people on your custom domain after redirect—so mail links keep working if the custom domain has a temporary issue. * Skillhabit checks domain health about once per hour. If health fails, redirect may turn off automatically to protect access. #### Bypass When Something Breaks [#bypass-when-something-breaks] Add **`?no-redirect=true`** to the default-domain URL to skip the redirect while you fix DNS or certificates. Bookmark the fallback link shown in the domain details if Skillhabit provides one. You can issue a limited number of default certificates per domain per day; wait or upload a custom certificate if you hit the limit. *** ### Email Domain (Sender Address) [#email-domain-sender-address] Verifying an **Email Domain** lets Skillhabit send mail from your domain (for example `user@example.com`) instead of the default system sender. 1. In the same domain details, open **Email Domain**. 2. Enable it and add the DNS records shown (ownership / send authorization—typically **TXT** and **CNAME** style records). 3. Verify, then **Activate** when ready. If validation fails or the domain is disabled, Skillhabit falls back to the default sender domain. Email domain setup does **not** require an active platform custom URL. #### Sender Address [#sender-address] When the email domain is **active**, use **Sender address** to choose the **local-part** before `@` on outbound notification From addresses. | Setting | Result | | --------------------- | ------------------------------------------------------------------------ | | Default | **`no-reply@{your-domain}`** | | Custom local-part | **`{local-part}@{your-domain}`** (for example `learning` or `kollegaer`) | | **Reset to no-reply** | Clears a custom value and restores the default | Rules for the local-part: letters, digits, `.`, `_`, or `-`—no spaces or `@`. The company **display name** on From stays as today. Without an activated custom email domain, Skillhabit keeps sending from the default workspace address (`{customerId}@skillhabit.com`). 1. Open the domain → **Email Domain** → **Sender address**. 2. Edit **Sender local-part**, then **Save** (or **Reset to no-reply**). *** ### Related [#related] * [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) — IT allowlist for default or custom senders * [Customization](/docs/configure/branding) * [Notifications](/docs/configure/notifications) * [Configure](/docs/configure) # Configure (https://docs.skillhabit.com/docs/configure) ### What Configure Is For [#what-configure-is-for] **Configure** is the admin home for workspace settings: how the product looks and speaks, how you connect external systems, and how people sign up and carry attributes. You open it from the app switcher like any other app. Settings live in three sections that match the product: | Section | Jobs | | -------------------------------------- | --------------------------------------------------------------------------------------------------------- | | **Customize Your Workspace** | Languages and timezone, email notifications, branding and welcome message | | **Connect Your Workspace** | API credentials, webhooks, authentication methods, attribute mappings, Microsoft Entra ID, custom domains | | **Control User Access and Attributes** | Registration pages, approved sign-up domains, user management (auto archive), attributes | ### Who This Is For [#who-this-is-for] Workspace **administrators**. Identity and DNS setup often needs your IT or Entra admin as well. ### Where to Start [#where-to-start] * New workspace look and feel → [Customization](/docs/configure/branding) and [Welcome Banner](/docs/configure/welcome-banner) * How people sign in or get provisioned → [External Identity Providers](/docs/external-identity-providers) (not only Configure cards) * Automations → [API Keys](/docs/configure/api-keys) and [Webhooks](/docs/configure/webhooks) ### Topics [#topics] #### Customize Your Workspace [#customize-your-workspace] #### Connect Your Workspace [#connect-your-workspace] #### Control User Access and Attributes [#control-user-access-and-attributes] # Language & Time Zone (https://docs.skillhabit.com/docs/configure/language-and-time-zone) ### What This Is For [#what-this-is-for] **Languages and Timezone** set workspace defaults for UI language and clocks when a person has not chosen their own settings yet. You also choose which languages people may pick in their profile. In the product: **Configure** → **Languages and Timezone** (under **Customize Your Workspace**). These defaults matter for things like welcome emails when a new user has no language preference, and for displaying times until someone sets a personal time zone. ### Who This Is For [#who-this-is-for] Workspace **administrators**. ### How Defaults and Preferences Interact [#how-defaults-and-preferences-interact] 1. **Workspace defaults** — **Default Language** and **Default Time Zone** apply when the user’s profile has no language or time zone yet (for example a newly created account). 2. **Browser detection** — On login, Skillhabit may detect language and time zone from the browser and offer them in the welcome dialog; the person can change them there. 3. **Enabled languages** — Only languages you enable appear as choices in profiles. The current default language cannot be removed from the enabled list. ### How to Configure [#how-to-configure] 1. Open **Configure** → **Languages and Timezone**. 2. Under **Enabled Languages**, open the picker and select which languages people may choose. 3. Under **Default Language**, pick the language used when the user’s language is unset or a translation is missing. 4. Under **Default Time Zone**, pick the zone for users who have not set one yet. ### Supported Languages [#supported-languages] Skillhabit supports: * English * German * Finnish * French * Swedish * Dutch * Russian * Lithuanian * Spanish * Polish * Ukrainian * Norwegian * Danish * Romanian * Estonian * Arabic * Persian * Somali * Chinese (Simplified) * Chinese (Traditional) Email notification templates can be edited per enabled language under [Notifications](/docs/configure/notifications). ### Related [#related] * [Notifications](/docs/configure/notifications) * [Configure](/docs/configure) # Login Methods (https://docs.skillhabit.com/docs/configure/login-methods) ### What This Is For [#what-this-is-for] **Login Methods** (in the product: **Configure** → **Connections** → **Authentication Methods**) turn sign-in options on or off for your workspace. The full guide—Login code (6-digit OTP, expiry, attempt limits), Magic Links, Microsoft, OpenID Connect, External API login links, shared devices, sessions, and when first login creates an account—lives under **External Identity Providers**: → **[SSO and Authentication](/docs/external-identity-providers/sso-and-authentication)** (see **Email: Login Code or Magic Links** for OTP details) Creating or syncing users (Entra, SCIM, External API) is separate from choosing how they sign in: → **[User Provisioning](/docs/external-identity-providers/user-provisioning)** → **[Introduction](/docs/external-identity-providers)** — how the two differ ### Who This Is For [#who-this-is-for] Workspace **administrators** (often with your identity admin for Microsoft or OpenID Connect). ### Related [#related] * [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) * [SSO and Email Addresses](/docs/configure/sso-and-email) * [API Keys](/docs/configure/api-keys) # Notifications (https://docs.skillhabit.com/docs/configure/notifications) ### What This Is For [#what-this-is-for] **Email Notifications** let you edit the text of system emails (per language) and turn some reminder emails on or off. In the product: **Configure** → **Email Notifications** (under **Customize Your Workspace**). If more than one language is enabled, use the language control in the dialog header to edit each locale. Blank fields fall back to the default text for that language. ### Who This Is For [#who-this-is-for] Workspace **administrators** who own invite and reminder copy. ### General Emails (Always On) [#general-emails-always-on] These cannot be turned off. You can still customize their text. | Template | When it sends | | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Welcome Invitation** | When you invite users or change a user’s email. You choose whether to send it on invite or email change. Not sent automatically when someone is added without an invitation. Includes sign-in instructions. | | **New Content Notification** | When mandatory content is newly assigned. Batched about every **15 minutes**; several assignments may share one email. Not sent again for the same course if the person already has that mandatory requirement or a passing grade. | | **Certificate Expiration Notification** | Wednesdays at **10:00 (GMT+1)** in the **1st and 3rd week** of each month, starting three months before expiry. Timing is approximate (async for all workspaces). Stops when the certificate is renewed or the person turns off expiration notifications in **Certificates**. | ### Optional Emails (Toggleable) [#optional-emails-toggleable] | Template | When it sends | | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Content Reminder Notification** | Wednesdays at **10:00 (GMT+1)** in the **2nd and 4th week** of each month for unfinished mandatory content. Timing is approximate. People with a passing grade on a course are not reminded for that course. Requires the workspace mandatory content reminder setting. You can turn this email off. | | **User Archived Soon Notification** | About **3 days** before Auto Archive archives an inactive account. You can turn this email off. | | **User Archived Notification** | When a user account is archived. Confirms they can no longer sign in. You can turn this email off. | ### How to Edit Templates [#how-to-edit-templates] 1. Open **Configure** → **Email Notifications**. 2. If needed, pick the language you are editing. 3. Open a template card, edit the text, and use the live preview before saving. 4. For optional emails, use the toggle on the card to enable or disable sending. ### When Email Is Not Sent [#when-email-is-not-sent] * Addresses ending with **`@noemail.skillhabit.com`** never receive mail. Use that domain when a user must exist in Skillhabit but has no real mailbox (common with External API or SSO-only accounts). See [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). * Users with **inactive** email status do not receive mail until an administrator reactivates the address in **Users & Groups**. How Skillhabit picks an email from SSO or Entra: [SSO and Email Addresses](/docs/configure/sso-and-email). ### Related [#related] * [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) — help IT so mail reaches corporate inboxes * [Notifications reference](/docs/reference/notifications) — full catalog of emails and binding points * [Auto Archive](/docs/configure/auto-archive) — archive warning emails * [Language & Time Zone](/docs/configure/language-and-time-zone) — which languages you can edit * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [Configure](/docs/configure) # Registration Pages (https://docs.skillhabit.com/docs/configure/registration-pages) ### What This Is For [#what-this-is-for] **Registration Pages** are separate sign-up flows for new people. Each page can set groups and attribute values at signup, collect specific attributes, limit email domains, and control whether the page appears on the login screen. Use them when different audiences need different onboarding—departments, partners, campaigns—without changing the whole workspace default profile. In the product: **Configure** → **Registration Pages**. ### Who This Is For [#who-this-is-for] Workspace **administrators** who onboard segments of users. Not a replacement for directory sync when Entra or SCIM should own lifecycle—see [User Provisioning](/docs/external-identity-providers/user-provisioning). ### Registration Pages vs Workspace Attributes [#registration-pages-vs-workspace-attributes] | | **Workspace attributes** | **Registration pages** | | -------- | ---------------------------- | ----------------------------------------------------------------------------- | | Scope | Global defaults for everyone | Only people who sign up through that page | | Best for | Data relevant to all users | Segmented entry: hidden defaults, forced collection, unique branding per flow | After signup, people still get the workspace’s default attribute configuration for ongoing profile behavior. Registration settings apply at the point of entry. ### What You Can Configure on a Page [#what-you-can-configure-on-a-page] | Area | What it does | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | **Details** | Image, **Registration page title**, optional description, unique **slug** (URL). Copy the registration page URL to share. | | **Attributes** | Collect or override attributes during registration (**Add attribute**). | | **Group Memberships** | Automatically add new users to selected groups. | | **Allowed email domains** | Limit who can sign up through this page to listed domains. | | **Access** | **Require PIN code** (4-digit), and/or **Hide from the login page** so people need the direct link. | ### How to Create a Registration Page [#how-to-create-a-registration-page] 1. Open **Configure** → **Registration Pages**. 2. Choose **Create Registration Page**. 3. Set title, slug, and optional image/description. 4. Add attributes and default groups as needed. 5. Optionally restrict **Allowed email domains**, set a PIN, or hide the page from login. 6. Save, then open the registration page URL and test as a new user. ### When to Prefer Other Paths [#when-to-prefer-other-paths] * First login for anyone on `@company.com` with Magic Links or Microsoft → [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) / [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * Ongoing directory sync → [User Provisioning](/docs/external-identity-providers/user-provisioning) * One-off invites → **Users & Groups** ### Related [#related] * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [Configure](/docs/configure) # SSO and Email Addresses (https://docs.skillhabit.com/docs/configure/sso-and-email) ### What This Is For [#what-this-is-for] When people sign in with **Microsoft** or **OpenID Connect**, or when **Entra directory sync** creates users, Skillhabit still needs an **email-shaped identifier** on each account. That value may come from a real mailbox field, from a principal name, or—when nothing usable exists—from Skillhabit’s placeholder domain **`@noemail.skillhabit.com`** (those addresses **never receive** system email). This page explains **how that address is chosen**. It is not a setup guide for sync or login methods—use [User Provisioning](/docs/external-identity-providers/user-provisioning) and [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). Delivery rules for placeholders and inactive mail: [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). ### Who This Is For [#who-this-is-for] Workspace **administrators** and identity admins troubleshooting why an SSO or synced user has an unexpected address—or no mailbox delivery. ## Microsoft Entra ID Directory Sync [#microsoft-entra-id-directory-sync] When Skillhabit synchronizes users from Microsoft Entra ID (Azure AD), it builds the Skillhabit email in this order: 1. **`mail`** — the directory mail attribute, when set. 2. **`otherMails`** — the first non-empty alternate address. 3. **Guest / external UPN** — if `userPrincipalName` looks like a guest account (`…#EXT#@…`), Skillhabit converts it to a normal address when possible (for example `john.doe_contoso.com#EXT#@tenant.onmicrosoft.com` → `john.doe@contoso.com`). 4. **`userPrincipalName`** — used when mail and other mails are empty (often already an email-like value). 5. **Name or directory id** — if none of the above exist, Skillhabit falls back to surname, given name, or the Microsoft user id. Then: | Resolved value | What Skillhabit stores | | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Looks like a **valid email** | Kept as-is. If the domain cannot receive mail (no MX), the address may later become **inactive** until an admin reactivates it. | | **Missing or not a valid email** (no `@`, unparseable junk, etc.) | Rewritten to a unique **`…@noemail.skillhabit.com`** address so the account can still sync and sign in. No system email is sent to that domain. | ## Microsoft (Teams / Office 365) Sign-In [#microsoft-teams--office-365-sign-in] Interactive Microsoft login reads the signed-in Graph profile and picks: 1. **`mail`**, if present. 2. Otherwise a converted **guest UPN** when applicable. 3. Otherwise **`userPrincipalName`**. Skillhabit then matches an existing user by that email, or by the Microsoft Graph integration id if the email does not match. New accounts are not created from this login path alone—provision users via Entra sync, SCIM, the External API, or an administrator first. ## OpenID Connect Sign-In [#openid-connect-sign-in] For OpenID Connect, Skillhabit looks for an email-like claim in this order: 1. **`email`** 2. **`preferred_username`** (often email-shaped even when `email` is empty) 3. **`upn`** (user principal name) If **none** of these claims are present, sign-in cannot complete (there is no address to attach to the Skillhabit user). Configure your identity provider to release at least one of these claims. When a claim is present and valid, Skillhabit uses it as the user’s email. Prefer releasing a real **`email`** claim when people should receive Skillhabit notifications; use a deliberate **`@noemail.skillhabit.com`** value only when email delivery must be suppressed. ## Practical Guidance [#practical-guidance] * Empty **`mail`** with a valid **`userPrincipalName`** / **`preferred_username`** is normal—Skillhabit uses the principal name as the address. * Guest / B2B Entra users often only have a guest UPN; Skillhabit converts that when it can. * To **block all Skillhabit email** for an SSO user, ensure their Skillhabit address ends with **`@noemail.skillhabit.com`** (Entra sync does this automatically when the directory has no valid email; you can also set that domain via API). * Placeholder and inactive addresses cannot use **Magic Links**—keep Microsoft or OpenID Connect enabled for those users. ### Related [#related] * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [Introduction](/docs/external-identity-providers) * [Notifications](/docs/configure/notifications) * [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) # Webhooks (https://docs.skillhabit.com/docs/configure/webhooks) ### What This Is For [#what-this-is-for] **Webhooks** push events from Skillhabit to an HTTPS URL you control when something happens in the workspace—for example course progress, meetup updates, or program changes. Your system can then update a CRM, HR tool, or chat channel. In the product: **Configure** → **Connections** → **Webhooks**. You can have up to **five** webhooks. The feature must be enabled for your account—contact Skillhabit if it is not available. ### Who This Is For [#who-this-is-for] Workspace **administrators** and developers who own the receiving endpoint. ### Before You Start [#before-you-start] * Have an **HTTPS** endpoint ready to accept Skillhabit’s delivery envelope. * Know which event types you need (**Course**, **Program**, **Progress**, **SCORM**, **Meetup**—availability can vary; the UI shows what you can select). * For payload shape, headers, and the full event catalog, use the API docs: [Webhooks](/api-reference/webhooks). ### How to Create a Webhook [#how-to-create-a-webhook] 1. Open **Configure** → **Connections** → **Webhooks**. 2. Choose **Create a webhook**. 3. Set **Endpoint** (valid HTTPS URL), optional **Description**, and **Enabled**. 4. Select at least one **Event type**. 5. Optionally add **Custom headers** (name/value pairs) if your receiver needs them. 6. Save. Edit an existing webhook from the list. Delete webhooks you no longer need (required if you are at the five-webhook limit). ### Example Jobs [#example-jobs] * Update a CRM when someone completes a course * Notify HR when a certificate is about to expire (combine with certificate-related events / processes your side) * Post to Slack or Teams when someone enrolls or finishes learning ### Related [#related] * [Webhooks API reference](/api-reference/webhooks) — delivery envelope and event catalog * [API Keys](/docs/configure/api-keys) — calling Skillhabit (inbound) vs webhooks (outbound) * [Configure](/docs/configure) # Welcome Banner (https://docs.skillhabit.com/docs/configure/welcome-banner) ### What This Is For [#what-this-is-for] The **welcome message** is a branded block at the top of **Home**: an optional image, a short header, and a short message for people when they open the workspace. In the product it sits in **Configure** → **Customization** → **Welcome message** (same dialog as [branding](/docs/configure/branding)). Docs call this page **Welcome Banner** because that is how many teams describe the Home hero. ### Who This Is For [#who-this-is-for] Workspace **administrators** shaping first impressions for learners and staff. ### What You Can Set [#what-you-can-set] | Field | UI label | Notes | | ------ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | Image | (image picker) | Cropped welcome image for the Home section—aim for **2000 × 400** ([dimensions](/docs/reference/file-types#recommended-image-dimensions)) | | Header | **Welcome header** | Slightly longer line for context | | Body | **Welcome message** | Short welcome text | ### How to Edit the Welcome Message [#how-to-edit-the-welcome-message] 1. Open **Configure**. 2. Under **Customize Your Workspace**, open **Customization**. 3. Scroll to **Welcome message**. 4. Upload or change the image, then set **Welcome header** and **Welcome message**. 5. Clear a field if you want to remove that part of the section. ### Result [#result] People see your welcome section when they open **Home**. Brand logo and platform colors remain under the other sections of **Customization**. ### Related [#related] * [Customization](/docs/configure/branding) * [Configure](/docs/configure) # Advanced Renewal Paths (https://docs.skillhabit.com/docs/create/advanced-renewal-paths) ### What This Is For [#what-this-is-for] Beyond “this content renews its own certificate,” Skillhabit supports **strategic renewal**: 1. **Single content renewal** — one refresher renews certificates from several older items 2. **Category streaks** — tiered rules so completing a higher (or listed) level renews certificates tagged for that streak Use this when compliance needs a shared refresher or a levelled curriculum—not for simple one-to-one renewals ([Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal)). ### Who This Is For [#who-this-is-for] Administrators designing multi-course certification programs in **Create**. ### Single Content Renewal [#single-content-renewal] 1. Build (or pick) a short refresher course (or other content type that can issue / renew). 2. On each **older** certificate’s **Activate recertification** settings, set **Content to use for recertification...** to that refresher. 3. Completing the refresher renews those certificates for holders who take the renewal path. ### Category Streaks [#category-streaks] **Category streaks** let you list **categories** that are allowed to renew a certificate. Completing a course whose category appears on another certificate’s streak can renew that certificate. #### Before You Start [#before-you-start] * Tag each course with **only its own level category** (for example level 1, level 2, level 3). * Plan one streak **per tier** you want to protect (see example below). #### Steps — Author a Tiered Streak [#steps--author-a-tiered-streak] 1. On each course whose **certificate should be renewable**, open certificate / recertification settings and find **About category streaks**. 2. **Add new streak** or select an existing streak (**Streak name**). 3. **Add category to streak** — list the levels that are allowed to renew **this** certificate. 4. Set **priority content** on the streak so **Renew** sends learners to the course you intend. 5. Publish as needed. #### Example — Level 1–3 Hierarchy [#example--level-13-hierarchy] | Certificate on… | Streak should list… | | --------------- | ----------------------------------- | | Level 3 | *level 3* | | Level 2 | *level 3* and *level 2* | | Level 1 | *level 3*, *level 2*, and *level 1* | Completing a course renews certificates whose streak **lists** that course’s category. #### Pitfalls [#pitfalls] * **One shared streak on all tiers** means **any** listed level can renew **every** certificate in that streak—including lower levels renewing higher ones. * **Priority order** in the streak UI (**Higher in the list means higher priority**) is **not enforced at runtime** today. Renewals are not exclusive: a certificate can be renewed again by any level its streak lists, in any order. Prefer **one streak per tier** until runtime priority is enforced. * Creating or updating a certificate in **Users & Groups** also runs the streak—so a manual date change can update the user’s other streaked certificates. ### Result [#result] Holders renew through the refresher or levelled path you designed; **Certificates** and reminder emails still follow normal expiration settings. ### Related [#related] * [Certificate Configuration](/docs/create/certificate-configuration) * [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) # Automated Course Notifications (https://docs.skillhabit.com/docs/create/automated-course-notifications) ### What This Is For [#what-this-is-for] When you mark content **Mandatory** for a group or user, Skillhabit sends **automatic email** so people know something new is required. This page explains **when** those emails fire, how they are **batched**, and when they are **skipped**. It is separate from: * Recurring **incomplete mandatory** reminders — [Mandatory Content Reminders](/docs/create/mandatory-content-reminders) * Certificate expiry reminders — [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) ### Who This Is For [#who-this-is-for] Administrators and collaborators who assign mandatory content and need to predict what learners will receive. ### What Triggers a Notification? [#what-triggers-a-notification] A notification is prepared when: 1. **User added to an existing requirement** — someone joins a group that already has an active mandatory course (or other supported mandatory content). 2. **New requirement without a new membership** — you add a new mandatory item to a group they already belong to, **or** you assign mandatory content **directly to the user**. ### Time Delay (About 15 Minutes) [#time-delay-about-15-minutes] Notifications are **batched** and sent about every **15 minutes**. Create’s mandatory help may say “within 10 minutes”—treat that as approximate; the batch window is about a quarter of an hour. If several courses become mandatory for someone at once, they usually arrive in **a single email**. This assignment email **cannot be turned off** by the learner (unlike some certificate reminder preferences). ### Protection Against Duplicate Notifications [#protection-against-duplicate-notifications] If the user **already** has a mandatory requirement for the **same** course (via another group **or** individual visibility), **no additional** notification is sent when another source adds the same requirement. ### Resetting and Reactivation [#resetting-and-reactivation] If the user **no longer has any source** that requires that course—removed from **every** mandating group **and** no individual mandatory assignment left—the notification logic for that course **resets**. If they get the requirement again later, it counts as a **new** assignment and a new notification can be sent. ### Exception for Completed Courses [#exception-for-completed-courses] Skillhabit **never** sends these notifications when the user **already has a passing grade** for that course—even if they join a new mandating group or get a direct assignment. ### Quick Reference [#quick-reference] | Scenario | Email? | Why | | ----------------------------------------------------------------------------- | ------ | ---------------------------------------- | | User added to a group with a mandatory course | Yes | New requirement; within about 15 minutes | | New mandatory target on a group they are in, or directly on the user | Yes | New requirement | | Same course already mandatory via another group or individual target | No | Already informed | | Assigned again after full removal (no group and no individual mandatory left) | Yes | Logic reset | | User already has a passing grade | No | No mail for completed courses | ### Related [#related] * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Mandatory Content Reminders](/docs/create/mandatory-content-reminders) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # Certificate Configuration (https://docs.skillhabit.com/docs/create/certificate-configuration) ### What This Is For [#what-this-is-for] **Certificate issuance** lets a built-in course, SCORM package, program, or meetup **issue a certificate** when the learner completes successfully. For **meetups**, completion is recorded when attendance is approved in **Follow Up**—then the certificate can issue if enabled. This page covers enabling certificates on content. Expiration, reminders, and renewal paths: [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal). ### Who This Is For [#who-this-is-for] Collaborators and administrators configuring compliance or completion credentials in **Create**. ### Before You Start [#before-you-start] * Content exists in **Create** (draft is fine while configuring; learners need a published item). * Decide whether certificates should **expire** and whether learners will **renew** via recertification content. * Workspace branding already drives the default certificate look; fully custom designs may need Skillhabit support. ### Steps — Enable Certificate Issuance [#steps--enable-certificate-issuance] 1. Open the content in **Create** → configuration. 2. Open **Certificate issuance**. 3. Enable **Enable certificate for this course** (wording may say course, SCORM, program, or meetup depending on type). When enabled, a certificate is issued on successful completion. 4. Optionally open **Certificate attachments** to **Attach an additional document to the certificate**. 5. Optionally open **Activate recertification**: * Set **Certificate is valid for...** (for example **6 months**, **One year**, **Two years**, **Three years**, **Five years**) * Choose **Content to use for recertification...** (or **Renewed by itself** when the same content renews the certificate) * Where offered, **Delete and replace this certificate instead of renewing it** (self-destruct / replace behaviour) 6. Save / publish as needed. ### Result [#result] Completing learners receive a certificate in the **Certificates** app, following workspace branding. Renewal settings feed expiration reminders and renew flows. ### Related [#related] * [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) * [Advanced Renewal Paths](/docs/create/advanced-renewal-paths) * [Certificates](/docs/certificates) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Run a Meetup](/docs/use-cases/run-a-meetup) # Certificate Expiration and Renewal (https://docs.skillhabit.com/docs/create/certificate-expiration-and-renewal) ### What This Is For [#what-this-is-for] When **Activate recertification** is on, certificates can **expire** after a validity period, and learners can **renew** by completing linked **recertification** content. This is configured on the certifying content in **Create**. Learners renew from the **Certificates** app (and related renewal entry points). ### Who This Is For [#who-this-is-for] Administrators and collaborators who run compliance or time-bounded credentials. Learners complete renewal; they do not configure it. ### Validity Options [#validity-options] Under **Certificate is valid for...**, typical choices are: * **6 months** * **One year** * **Two years** * **Three years** * **Five years** The clock follows your certificate / recertification settings from issue (and renew) time. ### Recertification Content and Visibility [#recertification-content-and-visibility] When you link **Content to use for recertification...**, learners who hold the relevant **issued certificate** can open that renewal content **without** standalone **Learn** visibility for the recertification item. That matters when the certificate was earned from **inner program content** that never had its own library tile—see [Visibility in Learn](/docs/learn/visibility). A generic share link still needs normal visibility (or a valid renewal path)—see [Share Link](/docs/create/share-link). ### Renewal Notifications [#renewal-notifications] Starting about **three months** before expiration, users receive email reminders on **Wednesdays at 10:00 (GMT+1)** during the **1st and 3rd week of each month** until they renew or turn notifications off in **Certificates**. Timing is approximate: reminders are generated asynchronously across workspaces and may take a while to reach everyone. ### Before You Start [#before-you-start] * Enable **Certificate issuance** and **Activate recertification** on the content—[Certificate Configuration](/docs/create/certificate-configuration). * Publish (or keep published) both the certifying content and any separate renewal content. * For multi-course renewal strategies, read [Advanced Renewal Paths](/docs/create/advanced-renewal-paths). ### Steps — Configure Expiration and Renewal [#steps--configure-expiration-and-renewal] 1. Open the content → **Certificate issuance** → **Activate recertification**. 2. Choose **Certificate is valid for...** 3. Set **Content to use for recertification...** (another course/SCORM/program/meetup, or **Renewed by itself**). 4. Review optional replace / self-destruct behaviour if shown. 5. Publish if you changed a live item. 6. Spot-check a test user in **Certificates** after they earn a certificate. ### Result [#result] Certificates expire on schedule; eligible holders can renew; reminder emails follow the cadence above. ### Related [#related] * [Certificate Configuration](/docs/create/certificate-configuration) * [Advanced Renewal Paths](/docs/create/advanced-renewal-paths) * [Certificates](/docs/certificates) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) # Collaborator Access (https://docs.skillhabit.com/docs/create/collaborator-access) ### What This Is For [#what-this-is-for] **Collaborators** are people who can **edit and preview** a specific course, SCORM package, program, or meetup in **Create**. This is **not** the same as: * Giving someone the **Create** app (profile / app access in **Users & Groups**) * Giving learners **visibility** in **Learn** ([Enrollment and Notifications](/docs/create/enrollment-and-notifications)) * Building a **Share link** for learners ([Share Link](/docs/create/share-link)) ### Who This Is For [#who-this-is-for] Authors who already own or can open the content, and administrators who manage shared authoring. ### Before You Start [#before-you-start] * The person should already be a user in the workspace. * They need the **Create** app enabled if they should use creation tools at all. * Open the content in **Create** (you must be a collaborator or an administrator). ### Steps — Add Collaborators [#steps--add-collaborators] 1. Open the content’s configuration page in **Create**. 2. Open **More actions** (or the equivalent actions menu) and choose **Collaborate**. 3. In **Collaborate with others**, search for users. 4. Select the people to add, then **Add**. 5. Under **Who has access?**, confirm the list. The dialog notes that **administrators and the collaborators listed below have access**. When someone **creates** new content, they are **automatically** set as a collaborator on that item. ### Steps — Remove a Collaborator [#steps--remove-a-collaborator] 1. Open **Collaborate** on the same content. 2. Find the person under **Who has access?** 3. Remove them and confirm **Remove collaborator**. ### Result [#result] Listed collaborators can edit and preview that item. Administrators retain full access even if they are not on the collaborator list. ### Related [#related] * [Managing Content](/docs/create/managing-content) * [Share Link](/docs/create/share-link) — learner links, not editors * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) # Content Management and Collaborator Access (https://docs.skillhabit.com/docs/create/content-management-and-collaborator-access) ### What This Is For [#what-this-is-for] Two related jobs in **Create**: 1. **Managing content** — finding items, understanding **draft** vs **published**, and knowing what you can change 2. **Collaborator access** — deciding who else can edit a specific course, SCORM, program, or meetup Unlike products that charge per author seat, anyone with the **Create** app enabled on their profile can use creation tools. Editing a *specific* item still follows collaborator (or admin) rules. ### Who This Is For [#who-this-is-for] Administrators and content authors who share work in **Create**. ### Pick a Guide [#pick-a-guide] | Job | Guide | | ------------------------------------------------- | ------------------------------------------------------------------------- | | Find content, draft vs published, what admins see | [Managing Content](/docs/create/managing-content) | | Add or remove people who can edit an item | [Collaborator Access](/docs/create/collaborator-access) | | Who sees content in **Learn** | [Enrollment and Notifications](/docs/create/enrollment-and-notifications) | | Learner deep links / QR codes | [Share Link](/docs/create/share-link) | ### Related [#related] * [Filtering and Search](/docs/create/filtering-and-search) * [Supported Content Types](/docs/create/supported-content-types) # Enrollment and Notifications (https://docs.skillhabit.com/docs/create/enrollment-and-notifications) ### What This Is For [#what-this-is-for] On each content’s configuration page in **Create**, **Visibility and targets** controls **who can see** the item in **Learn**, whether it is **Mandatory** or optional, and (optionally) when access starts and ends. This page is about **learner access and invitations**. It is **not** about who can **edit** the content—that is [Collaborator Access](/docs/create/collaborator-access). ### Who This Is For [#who-this-is-for] Administrators and collaborators who assign courses, SCORM, programs, or meetups to groups or users. ### Visibility vs Licenses vs Academy [#visibility-vs-licenses-vs-academy] | Setting | Question it answers | | -------------------------------------------- | ---------------------------------------------------------------------- | | **Visibility and targets** | Who can **see** this in **Learn**? | | **Content licenses** (paid Academy products) | After they can see it, can they **open and use** it? | | **Academy Visibility** | Is this listed in **Academy** (Public, Available, Purchase, Approval)? | Visibility applies to **all** content—free or paid. Licenses sit **on top** for paid products where licensing is enabled. Details: [Content Licenses](/docs/academy/content-licenses) and [Visibility in Learn](/docs/learn/visibility). If someone does **not** have visibility, the content does not appear in their library, they cannot browse to it there, and a **direct link** does not grant access unless they have the required visibility (or an exception below). ### Exceptions (Reachable Without Standalone Learn Visibility) [#exceptions-reachable-without-standalone-learn-visibility] * **Inside a program** — users who can open the program can open included items from there. * **Recertification** — holders of the relevant **issued certificate** can open configured renewal content from **Certificates** without standalone visibility to that item. **Academy when access is denied:** The product distinguishes visibility problems from license problems. If visibility is the blocker and the item (or program) is an Academy product, learners may see **Buy License** (opens that product in **Academy**). If they already have visibility but need a license, **Buy License** is offered so they can purchase or complete approval. Details: [Visibility in Learn](/docs/learn/visibility). *** ### Before You Start [#before-you-start] * Content should usually be **published** before you rely on learner access (drafts stay in **Create**). * Groups and users should already exist in **Users & Groups**. * Decide **Mandatory** vs optional for each target. ### Steps — Add Visibility Targets [#steps--add-visibility-targets] 1. Open the content in **Create** → configuration page. 2. Find **Visibility and targets**. 3. Choose **Add targets** and select **Groups** and/or **Users**. 4. For each target, set: * **Content is mandatory** or **Content is optional** * Optional **Activation** / **Expiration** dates ([Time-Restricted Access](/docs/create/time-restricted-access)) 5. Save. **Mandatory** effects (as shown in Create help): * Shows as **Mandatory** in **Learn** / **Home** * Marks people as **Invited** / **Not started** in **Analyze** until they start * Sends an automatic email about new mandatory content (batched; usually within about **15 minutes**—see [Automated Course Notifications](/docs/create/automated-course-notifications)) **Mandatory** stays **mandatory** after someone completes the content—it does not flip to optional for that user. > Meetups cannot currently be marked as mandatory. ### Academy Visibility (Optional) [#academy-visibility-optional] On **published** content, enable **Academy Visibility** to list the item and choose **Public**, **Available**, **Purchase**, or **Approval**. **Public** products can be shared by product link even when the workspace Academy is not open to anonymous browsing—see [Workspace Academy Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability) and [Public Content](/docs/academy/public-content). For **paid** products, you can turn on **Use licensing for this content** and set **License validity**. Sales licenses are **issued when the order completes** in **Academy**; manually issued licenses also grant **individual visibility** in **Learn**. Programs need a **program** license to start inner content. ### Result [#result] Targeted learners see the content in **Learn** (when active), receive mandatory emails when applicable, and appear correctly in **Analyze**. ### Related [#related] * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Visibility in Learn](/docs/learn/visibility) * [Automated Course Notifications](/docs/create/automated-course-notifications) * [Mandatory Content Reminders](/docs/create/mandatory-content-reminders) * [Time-Restricted Access](/docs/create/time-restricted-access) * [Share Link](/docs/create/share-link) # Filtering and Search (https://docs.skillhabit.com/docs/create/filtering-and-search) ### What This Is For [#what-this-is-for] When your workspace has many courses and programs, **Create** search and filters help you open the right item quickly. ### Who This Is For [#who-this-is-for] Collaborators and administrators managing a large content library. ### What You Can Use [#what-you-can-use] | Tool | What it does | | -------------------- | ------------------------------------------- | | **Free-text search** | Find content by **title** | | **Categories** | Filter by tags you set on content | | **Group visibility** | Filter by what specific **groups** can see | | **Status** | Filter **published** vs unpublished / draft | ### Steps [#steps] 1. Open **Create**. 2. Enter part of the title in search, or apply category, group, and status filters. 3. Open the item from the results. ### Related [#related] * [Managing Content](/docs/create/managing-content) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) — group visibility on the content itself # Create (https://docs.skillhabit.com/docs/create) ### What Create Is For [#what-create-is-for] **Create** is the app where you **author and publish** learning content: built-in courses, SCORM packages, programs, meetups, certificates, and AI-assisted drafts. Learners take that content in **Learn**. Sales and storefront settings live in **Academy**. Progress and results live in **Analyze**. ### Who Uses It [#who-uses-it] * **Collaborators** — people with the **Create** app on their profile who are listed on a piece of content (or who created it) * **Administrators** — can open and manage **all** content in the workspace, even when they are not collaborators ### Concepts That Are Easy to Mix Up [#concepts-that-are-easy-to-mix-up] | Idea | What it means | | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Draft vs published** | Drafts stay in **Create**. Learners only see **published** content (after visibility rules apply). | | **Visibility vs licenses** | **Visibility and targets** control who can *see* content in **Learn**. **Licenses** (paid Academy products) control who can *use* it after they can see it. | | **Mandatory vs optional** | On a target, **Mandatory** invites and tracks completion; **optional** only grants visibility. | | **Patch vs new revision** | On published built-in courses: a **patch** updates in place; a **new revision** bumps the revision and may restart in-progress learners. | | **Collaborate vs Share link** | **Collaborate** adds editors in **Create**. **Share link** builds a learner deep link / QR code. | ### Where to Click First [#where-to-click-first] 1. Open **Create** from the app launcher. 2. Create or open a course, SCORM, program, or meetup. 3. Build content → configure **Visibility and targets**, certificates, and Academy options → **Publish**. ### Guides [#guides] ### Related Use Cases [#related-use-cases] * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Sell a Course](/docs/use-cases/sell-a-course) * [Run a Meetup](/docs/use-cases/run-a-meetup) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) # Managing Content (https://docs.skillhabit.com/docs/create/managing-content) ### What This Is For [#what-this-is-for] Use **Create** as your content library: open what you can edit, see whether something is still a **draft** or already **published**, and keep working on the right item. ### Who This Is For [#who-this-is-for] Anyone with the **Create** app—collaborators on items they can access, and **administrators** who can open all content. ### Draft vs Published [#draft-vs-published] | Status | What it means | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Draft** | Work in progress in **Create**. Learners do not take it in **Learn** until you publish. | | **Published** | Live for learners who have visibility (and licenses, when configured). You can still edit; publishing updates may be a **patch** or a **new revision** for built-in courses—see [Publishing Updates](/docs/create/supported-content-types/publishing-updates). | **Share link** only appears after publish. Drafts show that you must publish first. ### Who Can See What in Create [#who-can-see-what-in-create] * **You create it** → you are automatically a **collaborator** on that item. * **Collaborators** → can edit and preview content they are assigned to (**Collaborate**). * **Administrators** → can view and manage **all** content, whether or not they are listed as collaborators. Collaborator rules do **not** replace **Learn** visibility. Someone can edit a course in **Create** and still not appear as a learner target—see [Enrollment and Notifications](/docs/create/enrollment-and-notifications). ### Before You Start [#before-you-start] * Confirm the person has the **Create** app on their profile in **Users & Groups** if they should author content. * Know whether you need to **edit** the item (collaborator / admin) or only assign learners (visibility targets). ### Steps — Open and Work on Content [#steps--open-and-work-on-content] 1. Open **Create**. 2. Use search and filters (title, categories, status, group visibility) to find the item—see [Filtering and Search](/docs/create/filtering-and-search). 3. Open the content. Check the status chip (**Draft** / **Published**). 4. Edit materials in the editor, then use the configuration page for **Visibility and targets**, certificates, Academy, and other settings. 5. When ready, **Publish** (or **Publish changes** for an already published course). ### Result [#result] You are working on the correct draft or published item, with a clear status before you invite learners or share links. ### Related [#related] * [Collaborator Access](/docs/create/collaborator-access) * [Content Management and Collaborator Access](/docs/create/content-management-and-collaborator-access) * [Publishing Updates](/docs/create/supported-content-types/publishing-updates) # Mandatory Content Reminders (https://docs.skillhabit.com/docs/create/mandatory-content-reminders) ### What This Is For [#what-this-is-for] **Mandatory content reminders** are recurring emails for people who still have **incomplete mandatory** content. They are **workspace-wide**, not configured per course. They are separate from the **one-time assignment** emails described in [Automated Course Notifications](/docs/create/automated-course-notifications). ### Who This Is For [#who-this-is-for] Workspace **administrators** who enable reminders in **Configure**. Learners receive the mail; they do not turn this feature on. ### Schedule [#schedule] When enabled, reminders go out on **Wednesdays at 10:00 (GMT+1)** during the **2nd and 4th week of each month**. Timing is approximate—reminders are generated asynchronously for all workspaces and may take a while to reach everyone. ### Before You Start [#before-you-start] * Content is already marked **Mandatory** for the right groups or users—[Enrollment and Notifications](/docs/create/enrollment-and-notifications). * You have access to **Configure**. ### Steps [#steps] 1. Open **Configure** → **Email Notifications**. 2. Find **Content Reminder Notification** (optional reminder for unfinished mandatory content). 3. Turn the email on and adjust copy if needed. 4. Save. Workspace-level mandatory reminder capability may also need to be enabled for your account—ask Skillhabit if the card is missing. Full template list: [Notifications](/docs/configure/notifications). ### Result [#result] Users with incomplete mandatory items receive periodic reminders on the cadence above. ### Related [#related] * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Automated Course Notifications](/docs/create/automated-course-notifications) * [Notifications](/docs/configure/notifications) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # Prerequisites (https://docs.skillhabit.com/docs/create/prerequisites) ### What This Is For [#what-this-is-for] **Prerequisite Content** locks a course, SCORM, program, or meetup until the learner has a **passing result on at least one** of the listed prerequisites. Use it for ordered curricula where any one foundation course is enough to unlock the next item—not when every listed item must be finished first. ### Who This Is For [#who-this-is-for] Authors building learning paths in **Create**. Learners see the lock message in **Learn** when prerequisites are not met. ### How It Works [#how-it-works] * Learners cannot **start** the item until **at least one** prerequisite has a passing result. * They do **not** need every prerequisite. The full list still shows so they can choose what to complete. * Available on courses, SCORM packages, programs, and meetups. * You can add up to **30** prerequisite items. ### Before You Start [#before-you-start] * Prerequisite items should exist (and usually be published and visible) so learners can complete them. * Decide whether a **program** or **Sequential** order inside a program is a better fit than cross-item prerequisites. ### Steps [#steps] 1. Open the content in **Create** → configuration. 2. Find **Prerequisite Content**. 3. Choose **Add prerequisite content** (button may also read **Add content**). 4. **Search for content**, select items, then confirm. 5. Remove items later with **Remove content** if needed. 6. Publish when ready. ### What Learners See [#what-learners-see] * If **none** of the prerequisites are passed, they see that prerequisites are not satisfied, with a list of items they can open. * After **at least one** passes, they can start—even if other prerequisites are still incomplete. ### Related [#related] * [Programs](/docs/create/supported-content-types/programs) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Taking Courses](/docs/learn/taking-courses) # Share Link (https://docs.skillhabit.com/docs/create/share-link) ### What This Is For [#what-this-is-for] **Share link** builds a **deep link** (and optional **QR code**) so people can open **published** content in **Learn** or on the **Academy** product page. It does **not** bypass access rules for most products, and it is **not** how you add editors—that is **Collaborate** ([Collaborator Access](/docs/create/collaborator-access)). ### Who This Is For [#who-this-is-for] Authors and administrators who distribute courses, SCORM, meetups, or programs outside the library browse path (email, intranet, print QR). ### Before You Start [#before-you-start] * Content must be **published**. Drafts show **Publish content to generate a shareable link.** * For an Academy destination, turn on **Academy Visibility** first—otherwise Skillhabit uses **Learn**, and Academy may show **Turn on Academy for this content to use an Academy link.** ### Steps [#steps] 1. Open the published content’s configuration page in **Create**. 2. Choose **Share link** in the toolbar. 3. Set **Link opens in**: * **Learn** — opens the content in **Learn** * **Academy** — opens the **Academy product page** (or anonymous participation entry for **Public** products when the recipient is not signed in) 4. Set **Navigation**: * **Full** — normal Skillhabit menus while using the link * **Lock** — stay inside the content with the **main menu hidden** until they leave (compact header with account controls remains) * **Block** — same restricted navigation as **Lock** at first; **full menus return** when the content is marked **complete** 5. Copy the **Link**, or use **Download QR code** for a PNG. ### Access Rules [#access-rules] Share links are **deep links**, not bypass tokens. * Most availability types still need **Learn** visibility (and **licenses** where configured)—[Enrollment and Notifications](/docs/create/enrollment-and-notifications). * **Exception:** **Public** Academy products allow anonymous access via the Academy / product share URL without Learn visibility. ### Result [#result] You have a stable URL or QR that opens the right app surface with the navigation mode you chose. ### Related [#related] * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Public Content](/docs/academy/public-content) * [Sell a Course](/docs/use-cases/sell-a-course) * [Collaborator Access](/docs/create/collaborator-access) # Time-Restricted Access (https://docs.skillhabit.com/docs/create/time-restricted-access) ### What This Is For [#what-this-is-for] On **Visibility and targets**, each group or user target can have an **Activation** date and an **Expiration** date. Learners only get access while the target is active. Use this for campaigns, semester windows, or delayed rollouts—on both **Mandatory** and optional targets. ### Who This Is For [#who-this-is-for] Administrators and collaborators assigning time-bounded access in **Create**. ### Activation and Expiration [#activation-and-expiration] | Control | Typical choices | | -------------- | -------------------------------------------- | | **Activation** | **Immediate**, or **Select activation date** | | **Expiration** | **None**, or **Select expiration date** | Until activation, the target can appear under **Targets scheduled to activate**. After expiration, under **Expired targets**. Active ones sit under **Active targets**. ### Before You Start [#before-you-start] * Decide whether the content itself should stay published while only **targets** are time-boxed (usual approach). * Have the groups or users ready under **Add targets**. ### Steps [#steps] 1. Open the content → **Visibility and targets**. 2. **Add targets** or edit an existing target. 3. Set **Mandatory** or optional as needed. 4. Under **Activation**, choose **Immediate** or a date/time. 5. Under **Expiration**, choose **None** or a date/time. 6. Save. ### Result [#result] People only see (and are invited for) the content inside the window you set. Outside that window, remove or wait for expiry rather than relying on a share link alone. ### Related [#related] * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # FAQ (https://docs.skillhabit.com/docs/faq) ### What This FAQ Is For [#what-this-faq-is-for] Quick answers to questions support and admins hear often. Each answer stays short and points to the how-to that owns the full detail—so product truth lives in one place. ### Who This Is For [#who-this-is-for] **Administrators**, **managers**, and **authors** troubleshooting access, publishing, results, roles, or sign-in. Learners can use the visibility answers when something is missing from **Learn**. *** ## Visibility & Learn [#visibility--learn] **Is Skillhabit an LMS?** Skillhabit is a **learning and certification platform** for regulated and quality-driven organizations—agile learning with **compliance-grade control**. It includes full **LMS** capabilities (content, libraries, progress, groups, SSO), so if you searched for an LMS, you are in the right place. The product story centers on mandatory tracks, certification (including external audiences), renewal, and evidence of completion. Overview: [What Is Skillhabit?](/docs/overview). **Why can’t a user see a course they were enrolled in?** Usually **visibility**, not enrollment alone. In **Create**, confirm the person’s **group** or **individual visibility**. **Learn** only lists standalone items they are allowed to see. Content taken only **inside a program** may never appear as its own library row—they open it from the program. Certificate **recertification** can also unlock renewal content without a standalone **Learn** tile. Full rules: [Visibility in Learn](/docs/learn/visibility). **Someone sees Buy License—do they need a license, or visibility?** **Buy License** can mean more than one thing. If they lack **visibility** and the item is an Academy product, the dialog often still offers **Buy License** (opens the Academy product page). If they **already have visibility** but the paid product uses licenses, **License required** means they need a valid **content license** to start. Visibility and licenses answer different questions—you normally need **both** for license-gated paid products. See [Visibility in Learn](/docs/learn/visibility) and [Content Licenses](/docs/academy/content-licenses). **How do I reset a user’s progress on a course?** Depends what you need to clear: * **One person, completed result / certificate** — On their profile in **Users & Groups**, delete the certificate for that course so they can take it again. See [Users and Profiles](/docs/users-and-groups/users-and-profiles). * **One person, attempt limit exhausted** — Reset attempts under **Content Attempts** on the same profile. * **Everyone after a publish** — When you publish updates, use **Advanced options → Force reset all previously completed results** (works for a **patch** or a **new revision**). See [Publishing Updates](/docs/create/supported-content-types/publishing-updates). *** ## Create & Publishing [#create--publishing] **What’s the difference between a patch and a new revision?** A **patch** keeps the same revision number and applies non-structural fixes **in place**—learners mid-course usually keep their place after refresh. A **new revision** increases the revision number (required when structure changed, or when you turn **Increment revision number** on). Force-reset of completed results is a separate advanced option either way. Details: [Publishing Updates](/docs/create/supported-content-types/publishing-updates). *** ## Analyze [#analyze] **Why aren’t my survey results showing in Analyze?** For **anonymous** surveys, Skillhabit hides results until **at least three** users have responded—so individuals can’t be identified. Named (non-anonymous) surveys show earlier. Browse survey text under **Content statistics** → **Question statistics**. See [Content Statistics](/docs/analyze/content-statistics) and [Building Blocks](/docs/create/supported-content-types/building-blocks) (survey anonymity can’t be turned off once enabled). *** ## Roles [#roles] **What’s the difference between a Manager and a Collaborator?** | Role | Scope | Typical work | | ---------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Manager** | One or more **groups** | See members in those groups; optionally manage manual membership, approve Academy requests, and view those users’ results in **Analyze** (with the right permissions) | | **Collaborator** | A specific **content** item in **Create** | Edit and preview that course, program, meetup, or SCORM package; with **Analyze** access, follow results for content they collaborate on | Managers are set in **Users & Groups**; collaborators are added per item in **Create**. Guides: [Managers](/docs/users-and-groups/managers) · [Collaborator Access](/docs/create/collaborator-access). *** ## Identity & Email [#identity--email] **What’s the difference between SSO and user provisioning?** They solve different problems. **Provisioning** answers who **exists** in Skillhabit (create, update, archive—often with groups) from Entra, SCIM, or the External API. **SSO / authentication** answers how someone **signs in** (Login code, Magic Links, Microsoft, OpenID Connect, API login links). You often need **both**. Start here: [External Identity Providers](/docs/external-identity-providers). **How do I create a user who should not receive emails?** Give them a unique address on **`@noemail.skillhabit.com`**. Skillhabit **never** sends email to that domain. Use it for External API (or similar) accounts that sign in another way. Entra sync can assign this domain when the directory has no valid email. Those users cannot use **Login code** or **Magic Links**—plan Microsoft, OpenID Connect, or an API login link. See [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) and [SSO and Email Addresses](/docs/configure/sso-and-email). **What if SSO users have no mail attribute?** Skillhabit still needs an email-shaped identifier. Entra sync and Microsoft / OpenID Connect sign-in fall back through other fields (for example `userPrincipalName`, `preferred_username`, guest UPN conversion). OpenID Connect needs at least one of `email`, `preferred_username`, or `upn`. If nothing usable exists on sync, Skillhabit may store **`@noemail.skillhabit.com`**. Full order of resolution: [SSO and Email Addresses](/docs/configure/sso-and-email). **Emails never arrive / land in spam—what should IT allowlist?** Default From is **`{workspace-id}@skillhabit.com`** (shown in email preview). Ask IT to allowlist that address or `@skillhabit.com` by domain—not by a fixed IP list. If you use a custom **Email Domain**, allowlist that too. Full IT checklist: [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email). *** ## Trust & Security [#trust--security] **Where is Skillhabit hosted, and are you GDPR / ISO ready?** Skillhabit is hosted **entirely in the EU**. TicTac Learn (Skillhabit’s group) holds **ISO 27001:2022** and operates GDPR-aligned practices. Short overview: [Trust & Security](/docs/trust-and-security). Legal documents: [TicTac Trust Centre](https://www.tictaclearn.net/trust-center). Live uptime: [status.skillhabit.com](https://status.skillhabit.com/). **Is AI Course Studio safe for confidential company material?** AI generation sends the **prompts and files you submit** to **OpenAI** for that job. The product discloses that those inputs may be **logged for up to 30 days**. Do not upload secrets or unnecessary personal data. Full picture: [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy). Contracts and DPA: [TicTac Trust Centre](https://www.tictaclearn.net/trust-center). # Follow Up (https://docs.skillhabit.com/docs/follow-up) ### What This App Is For [#what-this-app-is-for] **Follow Up** is where you close the loop after learning happens: review open-ended **reflection** answers from courses, comment with learners, and—after a meetup occasion ends—finalize who attended. It is **not** where learners take courses or sign up for meetup occasions. That lives in **Learn**. Authors add reflection questions and schedule meetups in **Create**. | Job | Do It Here | Do It Elsewhere | | ------------------------------------------------------- | ----------------------- | --------------------------------------------- | | Read reflection answers and leave feedback | **Follow Up** (courses) | Learners answer and reply in **Learn** | | Mark who attended a meetup occasion and submit the list | **Follow Up** (meetups) | Learners sign up for an occasion in **Learn** | | Add reflection questions or schedule occasions | — | **Create** | ### Who This Is For [#who-this-is-for] | Role | What They Use **Follow Up** For | | ------------------ | -------------------------------------------------------------------------------------- | | **Administrators** | All courses with reflections, and all meetup attendance | | **Collaborators** | Courses they are assigned to in **Create** (reflections)—need **Follow Up** app access | | **Managers** | Reflection answers from people in their managed groups—need **Follow Up** app access | | **Learners** | Do **not** use this app for reflections or signup; they work in **Learn** | Meetup **Attendance list** updates and **Submit attendance list** are limited to **administrators**. ### Where to Click First [#where-to-click-first] 1. Open **Follow Up**. 2. You’ll see **What would you like to review?** with cards for **Courses** and **Meetups** (filter with **All**, **Courses**, or **Meetups**). 3. Open a course for **Reflection responses**, or a meetup → an **occasion** for the **Attendance list**. ### Guides [#guides] * [Reflection Questions](/docs/follow-up/reflection-questions) — review answers, comment, and attach files * [Meetup Attendance](/docs/follow-up/meetup-attendance) — mark attendance and submit the list after an occasion * [Notifications](/docs/follow-up/notifications) — email when someone comments on a reflection ### Related Use Cases [#related-use-cases] * [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup) * [Take a Course as a Learner](/docs/use-cases/take-a-course) # Meetup Attendance (https://docs.skillhabit.com/docs/follow-up/meetup-attendance) ### What This Is For [#what-this-is-for] After a meetup **occasion** has run, **Follow Up** is where an **administrator** records who showed up and **submits** the final **Attendance list**. That submission locks the list and updates participation so attendance (and certificates, when configured) can complete for people marked as attended. This is **not** meetup signup. Learners choose an occasion in **Learn**. Authors create the meetup and occasions in **Create**. | Step | App | | ---------------------------------------------- | ------------- | | Create meetup and schedule occasions | **Create** | | Sign up for an occasion | **Learn** | | Mark attendance and **Submit attendance list** | **Follow Up** | ### Who This Is For [#who-this-is-for] **Administrators** only. Updating attendance checkboxes and **Submit attendance list** require an administrator account. Collaborators and managers do not finalize meetup attendance here (meetup cards on the **Follow Up** start page are for administrators). ### Before You Start [#before-you-start] * The meetup has at least one **occasion**, and people have signed up (or been assigned) so they appear on the list. * Prefer waiting until the occasion has **ended**. You can start marking checkboxes after the occasion **starts**, but you **cannot submit** until it has ended. * After you submit, you **cannot** change the list. ### Confirm Attendance After an Occasion [#confirm-attendance-after-an-occasion] 1. Open **Follow Up**. 2. Under **What would you like to review?**, open a **meetup** card (filter **Meetups** if needed). 3. On **Meetup follow-up**, open **Occasions** and select the occasion you ran. 4. On **Occasion follow-up**, open the **Attendance list**. 5. For each person, use the attendance checkbox to mark whether they attended (available after the occasion has started). Unchecked means they did not attend. 6. When the occasion has ended and the list looks right, click **Submit attendance list**. 7. Confirm in the dialog: **Are you sure you want to submit the attendance list?** — **After submitting, you will not be able to change the attendance list.** Choose **Submit**. If nobody was on the list, the button may read **Submit 'Nobody attended'** instead. While the occasion is still running, submit stays disabled with: **You cannot submit the attendance list before the Meetup has ended.** After a successful submit, the button shows **Attendance list submitted**. ### Result [#result] * Submitted attendance updates each learner’s meetup participation. * People marked as attended can reach a completed / approved outcome in **Learn**. * If certificate issuance is enabled on the meetup in **Create**, certificates become available in **Certificates** for those who attended. ### Related [#related] * [Follow Up](/docs/follow-up) — app overview * [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup) * [Meetups in Learn](/docs/learn/meetups) — signup and learner-facing results * [Meetups in Create](/docs/create/supported-content-types/meetups) — authoring and scheduling * [Certificate Configuration](/docs/create/certificate-configuration) # Notifications (https://docs.skillhabit.com/docs/follow-up/notifications) ### What This Is For [#what-this-is-for] When someone leaves a **comment** on a learner’s reflection response, Skillhabit can email that learner so they know feedback is waiting. This page is only about **reflection comment** email. It is not the same as: * Mandatory content reminders in **Configure** * Course assignment or certificate expiry mail * In-app alerts for meetup signup ### Who This Is For [#who-this-is-for] Anyone who comments on reflections (administrators, collaborators, managers) and the **learners** who receive the mail. Administrators who explain “why did I get this email?” to users. ### What Gets Sent [#what-gets-sent] | Trigger | Who Is Notified | What They See | | --------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Someone comments on a learner’s reflection response | The **learner** who wrote the response | Email with subject **New reflection comments**, title **You've received new reflection comments!**, and a **Read comment** button into the course overview in **Learn** | The mail names the comment author and the reflection question. Delivery still follows normal email rules (real mailbox, active email status)—see [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). Skillhabit does **not** email collaborators or managers when a learner replies. Reviewers discover new learner comments by opening the course again in **Follow Up** (or the thread in **Learn** if they are following a specific person there). ### How Learners Open the Comment [#how-learners-open-the-comment] 1. Open the email **New reflection comments**. 2. Choose **Read comment** (or open **Learn** → the course → overview → **Reflections**). 3. Read the thread and, if needed, reply with **Add a comment** / **Leave a comment...** the same way as in **Follow Up**. ### How Reviewers Leave a Comment (Reminder) [#how-reviewers-leave-a-comment-reminder] From **Follow Up**, open the course → **Reflection responses** → **Comments** / **Add a comment**. Full steps: [Reflection Questions](/docs/follow-up/reflection-questions). ### Related [#related] * [Reflection Questions](/docs/follow-up/reflection-questions) * [Follow Up](/docs/follow-up) * [Notifications in Configure](/docs/configure/notifications) — other workspace email settings * [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) — when mail is skipped # Reflection Questions (https://docs.skillhabit.com/docs/follow-up/reflection-questions) ### What This Is For [#what-this-is-for] **Reflection questions** are open-ended prompts authors add inside a built-in course in **Create**. Learners answer them while taking the course in **Learn**. Answers are **not graded**. **Follow Up** is where administrators, course collaborators, and managers **read those answers** and continue the conversation with **Comments**—including optional file attachments when the question allows files. Learners do **not** open **Follow Up** to answer. They submit (and later reply) from the course overview in **Learn**, under **Reflections**. ### Who This Is For [#who-this-is-for] * **Administrators** — all reflection responses on the workspace * **Collaborators** — responses for courses they collaborate on in **Create** (they also need **Follow Up** app access) * **Managers** — responses from users in groups they manage (they also need **Follow Up** app access) ### Before You Start [#before-you-start] * The course must include at least one **Reflection question** building block and be published so learners can complete it. * Someone must have submitted a response in **Learn**—otherwise **Follow Up** shows **No reflection responses yet.** * Collaborators and managers need access to the **Follow Up** app (grant app access in **Users & Groups**). ### Review Answers in Follow Up [#review-answers-in-follow-up] 1. Open **Follow Up**. 2. Under **What would you like to review?**, open a **course** card (use the **Courses** filter if the list is long). 3. You land on **Course follow-up**. The current prompt appears at the top. Use **Previous** / **Next** when the course has several reflections (for example **Reflection 1 of 3**). 4. If the course has more than one revision with answers, pick the **Course revision** that has the respondents you care about. 5. Under **Reflection responses**, open a person’s answer. Use **Download file** when they attached a file (or you’ll see **No file attached** / **This person has not submitted a response.** when nothing is there yet). ### Comment on a Response [#comment-on-a-response] 1. On a response, open **Comments** (or **Add a comment** if there are none yet). 2. Type in **Leave a comment...**. 3. Optionally **Attach a file** when the reflection allows files. 4. Send the comment. The learner can read the thread and reply from **Learn** → the course overview → **Reflections**. Email behavior: [Notifications](/docs/follow-up/notifications). ### Result [#result] You have reviewed the answers that matter for that course and left feedback the learner can act on. Course progress itself still comes from completing the course in **Learn**—reflections are conversation, not a separate pass/fail step. ### Related [#related] * [Follow Up](/docs/follow-up) — app overview and roles * [Notifications](/docs/follow-up/notifications) — email when someone comments * [Building Blocks](/docs/create/supported-content-types/building-blocks) — reflection questions in **Create** * [Taking Courses](/docs/learn/taking-courses) — where learners complete content * [Managers](/docs/users-and-groups/managers) — manager scope for groups # Startup Guide (https://docs.skillhabit.com/docs/getting-started) ### What This Guide Is For [#what-this-guide-is-for] This is the **first-week path** for a new Skillhabit workspace: make it look like your organization, bring people in, publish something learners can open, then check that progress shows up. It is a thin path with real UI labels. Deeper how-tos live under each app—follow the links instead of copying those pages here. For job-based recipes (onboard a department, sell a course, sync with SCIM), use [Use Cases](/docs/use-cases). On a **30-day free trial**, this path is a practical way to use the weeks you have. ### Who This Is For [#who-this-is-for] Workspace **administrators** setting up Skillhabit for the first time (or redoing a clean start on trial). You may need an IT contact later for identity—that step is optional at the end. ### Before You Start [#before-you-start] * You can sign in as an administrator and open **Configure**, **Users & Groups**, and **Create**. * You know your company logo and brand colors (or you are fine to skip branding and come back). * You have at least one email address for a test learner (yourself is fine). *** ### 1. Brand and Set Defaults [#1-brand-and-set-defaults] **Teach:** **Configure** owns workspace-wide look and language. Branding lives under **Customization**—not a separate “Branding” app. 1. Open **Configure**. 2. Under **Customize Your Workspace**, open **Customization**. 3. Set **Company name**, logo, **Brand background color**, **Primary color**, and **Secondary color** as needed. 4. Still under **Customize Your Workspace**, open **Language & Time Zone** and set the workspace defaults. Deeper: [Customization](/docs/configure/branding), [Language & Time Zone](/docs/configure/language-and-time-zone), [Welcome Banner](/docs/configure/welcome-banner). *** ### 2. Organize People With Groups [#2-organize-people-with-groups] **Teach:** Groups are how you assign content later. Prefer a few clear groups over one giant list. **Smart Groups** fill themselves from attributes; **Manual Groups** you fill yourself. 1. Open **Users & Groups**. 2. Go to the **Groups** tab. 3. Choose **Add** → **Create Groups**. 4. Create a **Manual Group** or a **Smart Group** for your first audience (for example “Pilot learners”). Deeper: [Groups](/docs/users-and-groups/groups), [Smart Groups](/docs/users-and-groups/smart-groups). *** ### 3. Add Users [#3-add-users] **Teach:** A **user** is one Skillhabit account. **Roles** and **App access** decide which apps they open—there is no separate “learner system.” 1. In **Users & Groups**, stay on the **Users** tab (or open it). 2. Choose **Add** → **Add Users**. 3. Enter **Email addresses**, or **Import CSV**. 4. Optionally add people to groups and send the welcome invitation when the dialog offers it. Changing an existing user’s email can also send that same welcome email; people added without an invitation do not get it automatically. 5. On each profile (or while adding), set **App access** so learners can open **Home** and **Learn** at minimum. Deeper: [Users and Profiles](/docs/users-and-groups/users-and-profiles), [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access). *** ### 4. Create and Publish Content [#4-create-and-publish-content] **Teach:** Learners only see **published** content (after visibility rules). Drafts stay in **Create**. 1. Open **Create**. 2. Create a course (or SCORM / program / meetup) using the building blocks you need—or start from [AI Course Studio](/docs/create/ai-powered-creation) if that fits. 3. Finish the materials, then open the content’s configuration page. 4. **Publish** when the content is ready for learners. Deeper: [Create](/docs/create), [Managing Content](/docs/create/managing-content), [Supported Content Types](/docs/create/supported-content-types). *** ### 5. Set Visibility and Targets [#5-set-visibility-and-targets] **Teach:** Enrollment is not a separate “enroll” button for most content. On the configuration page, **Visibility and targets** decides who can see the item in **Learn**, and whether each target is **Mandatory** or optional. * **Content is mandatory** — targets see it as mandatory work; Skillhabit tracks completion for compliance-style follow-up. * **Content is optional** — targets get visibility only; it is still real access, not a weaker leftover of mandatory. Both settings exist. Mandatory did **not** become optional-only. 1. Open the published content in **Create** → configuration page. 2. Find **Visibility and targets**. 3. Choose **Add targets** and select **Groups** and/or **Users**. 4. For each target, set **Content is mandatory** or **Content is optional** (and dates if you need a window). Deeper: [Enrollment and Notifications](/docs/create/enrollment-and-notifications), [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content), [Visibility in Learn](/docs/learn/visibility). *** ### 6. Set Up Academy (When You Need a Storefront) [#6-set-up-academy-when-you-need-a-storefront] **Teach:** **Academy** is the **storefront** (browse, buy, request). **Learn** is the **library** (day-to-day taking). Catalog who-can-open settings and per-product availability are different—see the Academy hub before you mix them up. Skip this step if you only assign content inside the company and do not need a catalog. 1. Open **Academy**. 2. Choose **Manage Academy** (administrators). 3. Start with **Visibility** (who can open the catalog), then **Content** / collections as needed. 4. On each **published** item in **Create**, turn on **Academy Visibility** when it should appear as a product. 5. If you sell: use **Activate Commerce**, connect payments, and read about licenses only for **paid** products. Deeper: [Academy](/docs/academy), [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability), [Supported Payment Options](/docs/academy/supported-payment-options), [Sell a Course](/docs/use-cases/sell-a-course). *** ### 7. Follow Results [#7-follow-results] **Teach:** After people start, progress lives in **Analyze**. Human review of reflections and meetup attendance lives in **Follow Up**. 1. Open **Analyze** → [Progressions](/docs/analyze/progressions) (and [Content Statistics](/docs/analyze/content-statistics) when you care about where learners struggle). 2. Export when you need a spreadsheet—[Exports](/docs/analyze/exports). 3. Open **Follow Up** for [Reflection Questions](/docs/follow-up/reflection-questions) and [Meetup Attendance](/docs/follow-up/meetup-attendance) when those apply. Or jump to [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) / [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup). *** ### 8. Delegate Managers and Collaborators [#8-delegate-managers-and-collaborators] **Teach:** Delegation is two different jobs. **Managers** oversee **groups**. **Collaborators** edit **content** in **Create**. **Managers** 1. On the person’s profile in **Users & Groups**, turn on the **Manager** role. 2. On each group they should oversee, assign them as a manager (with the permissions you want). 3. Grant **Analyze** app access if they should see progress for people in those groups. That scope follows the people in the groups—not only content assigned through the group. **Collaborators** 1. Give the person **Create** under **App access**. 2. On the content in **Create**, add them as a collaborator. 3. They can edit that content; with **Analyze** / **Follow Up** access they can also follow results and reflections for content they manage. Deeper: [Managers](/docs/users-and-groups/managers), [Collaborator Access](/docs/create/collaborator-access). *** ### Optional: Connect Identity [#optional-connect-identity] If a directory or IdP should **create and update** accounts—or people should **sign in** with Microsoft, OpenID Connect, or Magic Links—do **not** invent that from this page. Start with [External Identity Providers](/docs/external-identity-providers): provisioning answers who **exists**; SSO answers how they **sign in**. You often need both. *** ### Where to Go Next [#where-to-go-next] * [Use Cases](/docs/use-cases) — common jobs as short recipes * [What Is Skillhabit?](/docs/overview) — product map and trial / updates * App hubs in the sidebar when you need the next atomic how-to # Add Attributes to IdP Tokens and Profiles (https://docs.skillhabit.com/docs/external-identity-providers/add-attributes-to-idp-tokens) ### What This Is For [#what-this-is-for] Skillhabit **Attribute mappings** only work when your identity provider actually **sends** the value. This page shows how common IdPs put directory fields into: | Skillhabit source type | Where the value comes from | | ---------------------------- | ---------------------------------------------------------------------------------- | | **OpenID Connect claim** | ID token (and sometimes UserInfo) at login / JIT | | **Microsoft Entra property** | Microsoft Graph user fields during **Entra sync** (and related Graph-backed paths) | | **SCIM attribute** | SCIM user create/update payloads your IdP pushes | After the IdP releases the field, map it in Skillhabit under **Configure** → **Connections** → **Attribute mappings**. Full Skillhabit-side steps: [User Provisioning → Map Directory Attributes](/docs/external-identity-providers/user-provisioning#map-directory-attributes-onto-skillhabit-attributes). ### Who This Is For [#who-this-is-for] Workspace **administrators** working with your **identity / Entra / Okta / Auth0** admin. You need permission to change app claim configuration in the IdP—not only Skillhabit **Configure**. ### Before You Start [#before-you-start] 1. Create the Skillhabit **Attributes** you want to fill ([Custom Attribute Fields](/docs/configure/custom-attribute-fields)). 2. Decide the **source type** for each mapping (OIDC claim vs Entra Graph property vs SCIM path)—they are not interchangeable. 3. Prefer **short, stable claim or property names** (for example `department`, `officeLocation`). Avoid renaming claims later; remapping in Skillhabit is easier than breaking every token consumer. 4. After IdP changes, sign out and sign in again (OIDC) or run a sync / SCIM update so Skillhabit receives a fresh payload. *** ### Microsoft Entra ID (Azure AD) [#microsoft-entra-id-azure-ad] Entra is used in two different Skillhabit paths. Configure the path you actually use. #### A) OpenID Connect / Microsoft login — optional claims on the token [#a-openid-connect--microsoft-login--optional-claims-on-the-token] Use this when Skillhabit maps an **OpenID Connect claim** at sign-in. 1. In the [Azure portal](https://portal.azure.com), open **Microsoft Entra ID** → **App registrations** → the app Skillhabit (or your broker) uses for OpenID Connect / Microsoft sign-in. 2. Open **Token configuration**. 3. Choose **Add optional claim**. 4. Select token type **ID** (Skillhabit reads identity claims from the ID token / login profile path). 5. Add the directory claims you need—for example **`department`**, **`officeLocation`**, job title, or other optional claims Entra lists for your account type. 6. Save. If Entra prompts for Microsoft Graph permissions for that claim, grant **admin consent**. 7. In Skillhabit, create a mapping with **Source** = **OpenID Connect claim** and **External IdP Property Name** = the claim name Entra emits (often the same short name, for example `department`). **Custom / extension attributes in the ID token** 1. Prefer **Enterprise applications** → your app → **Single sign-on** → **Attributes & Claims** (SAML-style UI is also used for OIDC apps in many tenants) **or** a **claims mapping policy** on the service principal—follow your tenant’s standard for “emit extension attribute X as claim Y”. 2. Emit a **simple claim name** Skillhabit can type into **External IdP Property Name** (for example `costCenter`). Nested JSON paths are harder to support—prefer a flat string or string array. 3. Test with a fresh login. Confirm the claim appears in the ID token (Azure **Token configuration**, or a JWT decode of a test login) before debugging Skillhabit mappings. #### B) Microsoft Entra directory sync — Graph properties (not token claims) [#b-microsoft-entra-directory-sync--graph-properties-not-token-claims] Use this when Skillhabit maps a **Microsoft Entra property** during **Configure** → **Connections** → **Microsoft Entra ID** sync. Graph already exposes many profile fields without optional-claim setup—for example: | Typical Graph property | Example use | | ---------------------------------------------------------------------------- | ----------------------------------- | | `department` | Department attribute | | `officeLocation` | Site / office | | `jobTitle` | Job title | | `companyName` | Company | | `employeeId` | Employee number | | `onPremisesExtensionAttributes.extensionAttribute1` … `extensionAttribute15` | Synced on-prem extension attributes | In Skillhabit, set **Source** = **Microsoft Entra property** and **External IdP Property Name** to that Graph property path (exactly as above for extension attributes). You do **not** need to put these on an ID token for Entra **sync**—sync reads Graph. You **do** still need optional claims (section A) if the same field must arrive on **OIDC login** for users who are not updated by sync. *** ### Okta [#okta] Use this for **OpenID Connect claim** mappings when people sign in through Okta OIDC. 1. In Okta Admin, open **Security** → **API** → **Authorization Servers** (or your custom authorization server used by the Skillhabit OIDC app). 2. Open the authorization server → **Claims**. 3. **Add Claim**: * **Name** — the claim Skillhabit will map (for example `department`). Use this exact string in Skillhabit **External IdP Property Name**. * **Include in token type** — **ID Token** (always / or matching your scopes). * **Value type** — Expression or identity attribute (for example `user.department`, `user.costCenter`, or a custom profile attribute). 4. Save and assign the claim so it is included for the Skillhabit client / scopes you use. 5. Confirm the Okta OIDC app requests any scopes your claim requires. 6. In Skillhabit: **Source** = **OpenID Connect claim**, **External IdP Property Name** = the claim **Name** from step 3. **App-level ID token claims (org authorization server)** Some orgs configure claims under the OIDC **application** → **Sign On** → OpenID Connect ID Token section instead of a custom authorization server. Same idea: define a claim **name** and map it from an Okta user profile attribute, then use that name in Skillhabit. **Multi-value attributes** If the Okta attribute is multi-valued, emit a JSON array of strings in the ID token when Skillhabit should fill a **Multi Select** attribute (Skillhabit replaces the whole set on each apply). *** ### Auth0 [#auth0] Auth0 does not put arbitrary profile root fields on third-party ID tokens by default. Add **custom claims** with a namespaced identifier, then map that full claim name in Skillhabit. 1. Create (or reuse) an Auth0 Action on the **Login / Post Login** flow. 2. In the action, set claims on the ID token, for example: ```javascript exports.onExecutePostLogin = async (event, api) => { const namespace = 'https://skillhabit.com'; if (event.user.department) { api.idToken.setCustomClaim(`${namespace}/department`, event.user.department); } if (Array.isArray(event.user.groups)) { api.idToken.setCustomClaim(`${namespace}/costCenters`, event.user.groups); } }; ``` 3. Deploy the Action and add it to the Login flow. 4. Ensure the user profile (or an enrichment Action) actually populates `department` / custom metadata before the claim is set. 5. In Skillhabit: **Source** = **OpenID Connect claim**, **External IdP Property Name** = the **full** claim name, including namespace (for example `https://skillhabit.com/department`). Auth0 rejects non-namespaced custom claims on OIDC ID tokens—do not omit the namespace. *** ### Generic OpenID Connect IdPs [#generic-openid-connect-idps] For Ping, OneLogin, Keycloak, FusionAuth, AWS Cognito, and similar: 1. Find the IdP setting that adds **ID token claims** or **attribute statements** for your Skillhabit OIDC client (names vary: Claims, Mappers, Attribute mapping, Token customization). 2. Map a directory attribute → claim **name**. 3. Include the claim in the **ID token** (not only the access token). Skillhabit attribute mapping for OIDC is driven by login identity claims. 4. Prefer string or string-array values. 5. In Skillhabit, type the claim name exactly as it appears in the ID token. **Minimum identity claims** Skillhabit still needs for login itself (`email`, or `preferred_username`, or `upn`) are separate from attribute mappings—see [SSO and Email Addresses](/docs/configure/sso-and-email). *** ### SCIM Attribute Paths [#scim-attribute-paths] When Skillhabit maps a **SCIM attribute**, the IdP must send that attribute on SCIM **User** create/update—not on an OIDC token. Common patterns: | What you want | Typical SCIM path to send / map | | ---------------- | ------------------------------------------------------------------------- | | Department | `urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department` | | Cost center | `urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenter` | | Organization | `urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organization` | | Custom extension | Your IdP’s extension URN + attribute name (tenant-specific) | Steps (IdP side): 1. Enable the Skillhabit SCIM connector and confirm core User provisioning works ([User Provisioning → SCIM](/docs/external-identity-providers/user-provisioning#set-up-scim)). 2. In the IdP SCIM app, open **attribute mappings** / **provisioning attributes**. 3. Map the directory field onto the SCIM attribute path Skillhabit expects. 4. Push or reprovision a test user; confirm the attribute appears on the SCIM payload. 5. In Skillhabit: **Source** = **SCIM attribute**, **External IdP Property Name** = that path (exact string your tenant uses). Exact SCIM base URLs and which extension schemas Skillhabit accepts are workspace-specific—your Skillhabit contact confirms them when SCIM is enabled. *** ### Verify End-to-End [#verify-end-to-end] 1. **IdP** — Decode a fresh ID token (OIDC) or inspect a SCIM/Graph payload and confirm the claim / property is present with the expected value. 2. **Skillhabit mapping** — **Configure** → **Connections** → **Attribute mappings** points at that exact name/path and the right **Source** type. 3. **Apply** — Sign in again (OIDC) or wait for / force Entra sync / trigger SCIM update. 4. **Profile** — Open the user in **Users & Groups**; the Skillhabit attribute should update and stay **locked** when sourced from the IdP. If the IdP never sends the field, Skillhabit cannot invent it—fix the IdP emission step first. ### Related [#related] * [User Provisioning](/docs/external-identity-providers/user-provisioning) — Attribute mappings in Skillhabit * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [SSO and Email Addresses](/docs/configure/sso-and-email) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) # Introduction (https://docs.skillhabit.com/docs/external-identity-providers) ### What This Section Is About [#what-this-section-is-about] Many companies already have an **identity provider** (Microsoft Entra ID, Okta, and similar). Skillhabit can connect to that world in two different ways. Mixing them up is the most common setup mistake. | | **User provisioning** | **SSO / authentication** | | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | | **Question it answers** | Who **exists** in Skillhabit? | How does someone **sign in**? | | **What it does** | Creates, updates, and often archives users (and groups) from a directory or your own systems on a schedule or push | Lets people open Skillhabit with Login code / Magic Links, Microsoft, OpenID Connect, API login links, or (when enabled) SAML | | **What it does not do** | Decide how the login screen works | Replace full directory sync (groups, leavers, ongoing profile updates) | You often need **both**: provision people from Entra, SCIM, or the API when the directory should own lifecycle—and turn on the sign-in methods those people should use. Sign-in can also **create** a first account in some cases (approved email domains for Login code / Magic Links / Microsoft, or OpenID Connect with auto-create). That is still not the same as syncing groups and leavers from your IdP. ### Pick a Guide [#pick-a-guide] * **[User Provisioning](/docs/external-identity-providers/user-provisioning)** — Microsoft Entra ID sync, SCIM, External API user lifecycle, and **attribute mappings** onto Skillhabit attributes * **[SSO and Authentication](/docs/external-identity-providers/sso-and-authentication)** — Login code, Magic Links, Microsoft, OpenID Connect, External API login links, sessions, shared devices, and when first login creates an account * **[Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens)** — Entra, Okta, Auth0, and SCIM: release department and other fields so mappings can work ### Quick Examples [#quick-examples] * “New hires should appear in Skillhabit automatically from Entra, including groups.” → **Provisioning** (Entra sync), then enable **Microsoft** sign-in under SSO. * “Anyone on `@company.com` should get an account the first time they use email or Microsoft sign-in.” → Add the domain under **Approved for Sign Up**, enable the login method—see [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). * “Our portal creates users over HTTPS, then opens Skillhabit for them.” → **Provisioning** via the External API, then **Create sign-in link** under SSO / Authentication. * “Department from Entra should fill a Skillhabit attribute.” → Map in Skillhabit ([User Provisioning](/docs/external-identity-providers/user-provisioning#map-directory-attributes-onto-skillhabit-attributes)), and release the field from the IdP ([Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens)). ### Related [#related] * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) * [Configure](/docs/configure) # SSO and Authentication (https://docs.skillhabit.com/docs/external-identity-providers/sso-and-authentication) ### What This Is For [#what-this-is-for] **SSO and authentication** cover how people **prove who they are** when they open Skillhabit: email **Login code** or **Magic Links**, Microsoft account, OpenID Connect, External API login links, and related options. This page is about the **login experience**—and when first login may **create** a Skillhabit account. It does **not** replace directory sync for groups, leavers, and ongoing profile updates. For that, use [User Provisioning](/docs/external-identity-providers/user-provisioning). Unsure which you need? Read the [Introduction](/docs/external-identity-providers). ### Who This Is For [#who-this-is-for] Workspace **administrators** (and often your identity / Entra admin when enabling Microsoft or OpenID Connect). Integration developers use the **External API** section when a backend should open Skillhabit for an existing user. ### Sign-In vs Provisioning (Short Reminder) [#sign-in-vs-provisioning-short-reminder] | Goal | Go Here | | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | Create or sync users (and groups) from a directory or API on an ongoing basis | [User Provisioning](/docs/external-identity-providers/user-provisioning) | | Choose how people sign in—and whether first login may create an account | This page | *** ### When First Login Creates an Account [#when-first-login-creates-an-account] Not every sign-in method needs a user to exist beforehand. | Method | New account on first successful sign-in? | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Login code** / **Magic Links** (Email) | Yes, when the email domain is listed under **Approved for Sign Up** ([Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation)) | | **Microsoft** | Yes, when the email Skillhabit picks from the Microsoft profile is on an **Approved for Sign Up** domain | | **OpenID Connect** | Yes, when you turn on auto-create in the OpenID Connect login settings (**More options**) | | **External API login link** | The link itself only signs in—but you can **create the user with the same API** immediately before requesting the link | Admin invites, Entra sync, SCIM, registration pages, and External API **user** endpoints still create accounts outside of interactive sign-in. *** ### Choose Login Methods [#choose-login-methods] In **Configure**, enable the methods your workspace should offer: 1. Open **Configure** → **Connections** → **Authentication Methods** (also linked from **Login Methods**). 2. Turn on each method you need (details below). 3. For **Microsoft** or **OpenID Connect**, your workspace needs the **SSO** capability—ask Skillhabit if those options are missing. 4. For Email or Microsoft self-registration, set **Approved for Sign Up** domains under [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation). 5. Save, then test with a real sign-in. #### Email: Login Code or Magic Links [#email-login-code-or-magic-links] Email sign-in is one **Authentication Methods** entry (**Email**). Under **Email sign-in method**, choose: | Method | What the person receives | Where they finish | | -------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | **Login code** | A **6-digit** one-time code only (no clickable login URL) | On the **same browser/device** where they started—enter the code on the **Sign-in code sent** page | | **Magic link** | A one-time verify link | Wherever they open the email | * **New workspaces** default to **Login code**. **Existing workspaces** keep **Magic link** until an administrator switches them (or Skillhabit support changes it). * Switching methods takes effect for the next sign-in—no product redeploy. * Both options need a real mailbox. They do **not** work for **`@noemail.skillhabit.com`**—those accounts need Microsoft, OpenID Connect, or an External API login link. * If the address is new and its domain is **Approved for Sign Up**, Skillhabit creates the account when they complete email sign-in. Prefer **Login code** when people often start on a computer and read mail on a phone. Prefer **Magic link** when finishing in the mail client is intentional. ##### How Login Code Works [#how-login-code-works] Skillhabit can sign people in with a short one-time **login code** (OTP) sent by email, instead of a clickable magic link. 1. The person enters their email on the login page and chooses **Send a login code**. 2. Skillhabit emails a **6-digit code** to that address. The email has **no** sign-in link. 3. The UI shows **Sign-in code sent** and keeps that browser ready. They type the code there (or use **Send a new code** if needed). 4. If the code is correct, they are signed in **on that browser**—not on whatever device opened the inbox. Reading the email on a phone does **not** sign the phone in. The session stays on the computer (or device) where login started. That avoids the common magic-link problem where opening the link on another device moves the session there. ##### Login Code Security Controls [#login-code-security-controls] | Control | Behavior | | ------------------------- | -------------------------------------------------------------------------------------------------------------------- | | Tied to the login attempt | The code is bound to that specific login started in the browser—not usable on its own from another browser | | Expiry | Codes expire after **10 minutes** | | Attempt limit | After **5** incorrect attempts, that login attempt is locked; the person must request a **new** code | | Storage | Codes are stored **hashed** (not in plain text) | | Resend | Requesting a new code **invalidates** earlier unused codes for the same login | | Opening the email | Opening the email alone **never** authenticates anyone—only entering the correct code on the started login page does | #### Microsoft (Teams / Office 365) [#microsoft-teams--office-365] Lets people sign in with their Microsoft account. * Requires **SSO** capability, then configuration in **Configure**. * If the email from the Microsoft profile is new and on an **Approved for Sign Up** domain, Skillhabit creates the account on first sign-in. * Existing users are matched by email (or a stored Microsoft Graph integration id). * How Skillhabit picks an email from the Microsoft profile: [SSO and Email Addresses](/docs/configure/sso-and-email). #### OpenID Connect [#openid-connect] Connect an OpenID Connect–compliant identity provider. * Also requires **SSO** capability and configuration in **Configure**. * Under **More options**, turn on automatic account creation if new users should be created the first time they sign in through your IdP. * Your IdP must release at least one of **`email`**, **`preferred_username`**, or **`upn`**—otherwise sign-in cannot complete. Prefer a real **`email`** claim when people should get Skillhabit notifications. Details: [SSO and Email Addresses](/docs/configure/sso-and-email). #### SAML [#saml] Some workspaces can use **SAML** when Skillhabit enables it for the account. Contact Skillhabit support if you need SAML. *** ### External API User Authentication [#external-api-user-authentication] Integrations authenticate to the External API with a **bearer** [API key](/docs/configure/api-keys). That key is for **your backend calling Skillhabit**. The Authentication resource (**Create sign-in link**) opens Skillhabit for a user who already has an account. Creating that account is usually the step right before it—use the **Users** endpoints on the same API (or look up someone you already provisioned via Entra, SCIM, or **Users & Groups**). Typical flow: 1. **Create the user** with the External API Users resource if they are not already in Skillhabit (optionally with **`@noemail.skillhabit.com`** when there is no mailbox). Details: [User Provisioning](/docs/external-identity-providers/user-provisioning) and [External API](/api-reference). 2. Call **Create sign-in link** (`POST /auth`) with `userId` or `email` (`userId` wins if both are sent). Optionally pass `redirectUri` as a **query parameter** for where to continue after login. 3. Open the returned **pre-signed** link for that person (or send it from your portal). The link includes a login secret and expires at the returned timestamp. Your portal can create the account and hand them a login link in one session—no email login required. Copy-paste recipe: [Create a User and Sign-In Link](/api-reference/examples/create-user-and-sign-in-link).\ Overview of keys and placeholders: [External API](/api-reference). Full request/response shapes: [API reference](/api-reference) → **Users** and **Authentication**. *** ### Emails and Auto Sign-In [#emails-and-auto-sign-in] Only these flows authenticate someone from a link or code: 1. The **Magic link** login email (when Email is set to Magic link) 2. Completing a **Login code** on the mail-sent page 3. An **External API** pre-signed sign-in link (`POST /auth`) Other Skillhabit emails (welcome, assignments, certificates, reminders, and similar) use ordinary destination links. If the person is signed out, they sign in with the workspace’s normal method, then return to that destination. Opening those messages never signs anyone in by itself. *** ### Active Sessions [#active-sessions] Signed-in people can manage devices from **Profile** → **Active sessions**: * See devices currently signed in (and a **Session history** of signed-out or expired sessions) * **Sign out** one session, **Sign out other devices**, or **Sign out everywhere** Revocation can take about **15 seconds** to take effect on the next API call. Administrators can also revoke sessions for someone else from **Users & Groups**—see [Users and Profiles](/docs/users-and-groups/users-and-profiles#sessions). How long **new** sessions last is set under **Configure** → **User Management** → **Login Session Duration**—see [Auto Archive](/docs/configure/auto-archive#login-session-duration). *** ### Email Identifiers at Login and Sync [#email-identifiers-at-login-and-sync] SSO and directory sync still need an **email-shaped** identifier on each Skillhabit user. It may come from a mailbox field, a principal name, or—when nothing usable exists—**`@noemail.skillhabit.com`** (Skillhabit never sends system email there). Full attribute order and guest UPN behavior: [SSO and Email Addresses](/docs/configure/sso-and-email).\ Delivery and reactivation rules: [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). *** ### Shared Computers and Sign-Out Links [#shared-computers-and-sign-out-links] On shared devices (training-room PCs, kiosks, front desk), one person must leave a clean session for the next. * **Sign out before the next user**: Append **`?logout=true`** to any workspace URL (for example `https://yourworkspace.skillhabit.com/launchpad?logout=true`). Skillhabit clears the browser session and removes the flag from the address bar. Equivalent: **`?logout=1`** or **`?action=logout`**. Other query parameters are kept. * **Magic link while someone is already signed in**: Opening a magic login link **ends the previous session** and signs in the new user—no manual sign-out required first. * **Clean redirects**: Temporary login and logout flags are stripped after use so they do not linger in the address bar. Use logout links in **bookmarks**, **QR codes**, or “end session” buttons on shared stations. *** ### Related [#related] * [Introduction](/docs/external-identity-providers) * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [SSO and Email Addresses](/docs/configure/sso-and-email) — attribute mapping detail * [Login Methods](/docs/configure/login-methods) — Configure card (points here) * [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) * [Registration Pages](/docs/configure/registration-pages) * [External API](/api-reference) * [API Keys](/docs/configure/api-keys) # User Provisioning (https://docs.skillhabit.com/docs/external-identity-providers/user-provisioning) ### What This Is For [#what-this-is-for] **User provisioning** means Skillhabit **creates and updates people** (and often groups) from outside the product—your Microsoft directory, a SCIM identity provider, or your own software—instead of typing every user into **Users & Groups** by hand. Typical goals: * New hires appear in Skillhabit when they join the directory or HR system * Leavers are archived when they leave * Group membership stays aligned with groups you choose to sync Provisioning answers **who exists in Skillhabit** when a directory or your own system should own lifecycle (creates, updates, groups, leavers). It is **not** the same as choosing login methods. Sign-in options—and when first login may create an account—are in [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). If you are unsure which problem you are solving, start with the [Introduction](/docs/external-identity-providers). ### Who This Is For [#who-this-is-for] Workspace **administrators**, usually working with whoever owns Microsoft Entra ID / Azure AD, your SCIM IdP, or the team that builds against the External API. ### Ways to Get Users Into Skillhabit [#ways-to-get-users-into-skillhabit] | Approach | Best When | Where You Set It Up | | ----------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | **Microsoft Entra ID sync** | Entra is the source of truth and you want users + groups on a schedule | **Configure** → **Connections** → **Microsoft Entra ID** | | **SCIM** | Your IdP **pushes** users with the SCIM standard | Enabled by Skillhabit; then an [API key](/docs/configure/api-keys) | | **External API** | Your HR, CRM, or middleware creates and updates users over HTTPS | [API key](/docs/configure/api-keys) + [External API](/api-reference) / [API reference](/api-reference) | | **First login (approved domains / OIDC auto-create)** | You want accounts only when someone actually signs in | [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) | | **Manual / CSV** | Small workspace or one-off invites | [Users & Groups](/docs/users-and-groups) | You can combine paths (for example Entra sync for employees and the API for partners). Agree which system **owns** creates and deactivations so two sources do not fight. ### Provisioning vs First-Login Creation [#provisioning-vs-first-login-creation] Directory sync and the External API are still the right tools when you need **groups**, **leavers**, and profiles **before** someone signs in. Magic Links and Microsoft can create a user on **first login** when the email domain is under **Approved for Sign Up**. OpenID Connect can do the same when auto-create is enabled. Those paths do **not** sync Entra groups or archive leavers for you. For Entra-heavy workspaces you usually need: 1. **Provisioning** (this page) so accounts and groups stay aligned with the directory 2. **SSO / authentication** so people can open those accounts How Skillhabit picks an email-shaped identifier from directory claims: [SSO and Email Addresses](/docs/configure/sso-and-email). *** ### Set Up Microsoft Entra ID Sync [#set-up-microsoft-entra-id-sync] Skillhabit talks to Microsoft Graph using an **app registration** in your Entra tenant. Skillhabit stores the app’s **Application (client) ID** and **Directory (tenant) ID**, then trusts a **certificate** you upload in Azure. #### Before You Start [#before-you-start] * Ask your Skillhabit contact to enable the **Microsoft Entra ID** integration if **Configure** → **Connections** → **Microsoft Entra ID** shows that the feature is not enabled. * In the [Azure portal](https://portal.azure.com), create (or reuse) an **App registration**. You need permission to register apps and upload certificates. * Decide which Entra **groups** should sync into Skillhabit. #### Steps in Skillhabit [#steps-in-skillhabit] 1. Open **Configure** → **Connections** → **Microsoft Entra ID**. 2. Under **Configuration**, paste: * **Application (client) ID** * **Directory (tenant) ID**\ Find both in Azure: **Microsoft Entra ID** → **App registrations** → your app → **Overview**. 3. Click **Generate Certificate**. Confirm generation, then download the certificate file.\ **This download is one-time**—if you lose the file, generate a new certificate in Skillhabit. 4. In Azure, open the same app registration → **Certificates & secrets** → upload the downloaded certificate. 5. When credentials are correct, use **Manage Groups**: search groups, select which should sync, **Save**. 6. Optionally click **Force synchronise** for an immediate sync. Otherwise Skillhabit syncs about every **10 minutes**. #### What You Should See Afterward [#what-you-should-see-afterward] * Synced groups appear in **Users & Groups** (filter by Azure-synced groups). * Members show up as users; many are marked **externally provisioned**. * Profile fields for those users are largely **read-only**—lifecycle follows the directory. See [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). #### Keep Sync Healthy [#keep-sync-healthy] * Certificates last **one year**. Generate a new one in Skillhabit and upload it in Azure **before** expiry, or sync stops. * If the list looks wrong, recheck app IDs and the certificate, then **Manage Groups** / **Force synchronise**. #### Email Addresses From Entra [#email-addresses-from-entra] Sync picks an email-like address from directory attributes. If nothing valid exists, Skillhabit may store **`@noemail.skillhabit.com`** and will not send system email. Full rules: [SSO and Email Addresses](/docs/configure/sso-and-email). *** ### Set Up SCIM [#set-up-scim] **SCIM** (System for Cross-domain Identity Management) lets an identity provider **push** user (and often group) changes into Skillhabit over HTTPS, using an API key. #### Before You Start [#before-you-start-1] * Contact your Skillhabit representative to **enable SCIM** for the workspace. * Create an [API key](/docs/configure/api-keys) in **Configure**. * In your IdP, create a SCIM connector aimed at Skillhabit with the details Skillhabit provides for your tenant. Exact SCIM base URLs and attribute mappings are workspace-specific—your Skillhabit contact supplies them once SCIM is enabled. #### After SCIM Is Running [#after-scim-is-running] * SCIM users appear as **externally provisioned** in **Users & Groups**. * Prefer changing identity data in the IdP, not by editing those profiles in Skillhabit. Entra Graph sync and SCIM can run together or separately—pick one owner for lifecycle when possible. *** ### Provision Users With the External API [#provision-users-with-the-external-api] Use the **External API** when **your own system** (HR, CRM, middleware, partner portal) should create, update, or deactivate Skillhabit users on its own schedule—without Entra Graph sync or SCIM. #### Before You Start [#before-you-start-2] * Create an [API key](/docs/configure/api-keys) in **Configure**. * Treat the key like a password; only give it to trusted backends. * Decide how each user will **sign in** later (Magic Links, Microsoft, OpenID Connect, or an External API **login link**)—see [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). #### Steps [#steps] 1. Authenticate API calls with your key as a **bearer token** ([External API](/api-reference)). 2. Use the user (and group) endpoints in the [External API reference](/api-reference) to create and update accounts. Recipes: [Create a User and Sign-In Link](/api-reference/examples/create-user-and-sign-in-link) · [Sync Manual Groups](/api-reference/examples/sync-manual-groups). 3. Every user needs an **email-shaped** identifier. If they should not receive Skillhabit email, use a unique address on **`@noemail.skillhabit.com`**—Skillhabit never sends system mail there ([External API](/api-reference#users-without-a-real-email)). 4. After users exist, grant app access and groups in **Users & Groups** or via the API, depending on your automation. 5. To open Skillhabit for that person from your portal, create a pre-signed login link (**Authentication** / **Create sign-in link**)—documented under [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication#external-api-user-authentication). API-provisioned users can also appear as integrated / externally managed depending on how you create them—confirm behavior in **Users & Groups** after your first sync job. #### When to Prefer the API Over Entra or SCIM [#when-to-prefer-the-api-over-entra-or-scim] * Custom joiners/leavers rules that are not in Entra groups * Partners or contractors not in your corporate directory * You already have a service that must own the user lifecycle For standard Microsoft-only directories, **Entra sync** is usually simpler. For IdP-native push provisioning, prefer **SCIM** when Skillhabit has enabled it. *** ### Map Directory Attributes Onto Skillhabit Attributes [#map-directory-attributes-onto-skillhabit-attributes] Provisioning can also fill **Skillhabit attributes** (custom fields) from the directory—not only name and email. #### Before You Start [#before-you-start-3] * Create the target attributes under **Configure** → **Attributes** ([Custom Attribute Fields](/docs/configure/custom-attribute-fields)). * Know the **source path** your IdP sends (OIDC claim name, Microsoft Graph property such as `department`, or SCIM attribute path). * Attribute mappings may require the feature to be enabled for your workspace—ask Skillhabit if the tab is missing. #### Steps [#steps-1] 1. Open **Configure** → **Connections** → **Attribute mappings**. 2. Choose **Add mapping**. 3. Set: * **Source** — **OpenID Connect claim**, **Microsoft Entra property**, or **SCIM attribute** * **External IdP Property Name** — the claim / property / attribute path * **Skillhabit attribute** — an existing Text, Single Select, or Multi Select attribute * **Matching strategy** (list fields only) — **Match existing only** or **Create if missing** 4. **Save**. One mapping list applies across OIDC login / JIT, Microsoft Entra user sync, and SCIM user create/update—each mapping records which source type it uses. #### How Values Apply [#how-values-apply] | Behavior | Detail | | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | Overwrite | Mapped fields are updated from the IdP on each apply | | Profile lock | IdP-sourced fields stay locked on the user profile (directory is source of truth) | | **Text** | Writes the string; no choice lookup | | **Match existing only** (default for lists) | Trimmed, case-insensitive name match; unknown values are skipped (last value kept) without failing the whole user sync/login | | **Create if missing** | Creates a normalized choice, then assigns it (`Sales` / `sales` do not duplicate) | | **Multi Select** | IdP array (or comma-separated string) **replaces** the stored set on each sync | Choice pickers for large lists are searchable so auto-created values stay usable. Choice hierarchy (parent/child levels) is a separate feature and is not required for mappings. #### Release the Field From Your IdP First [#release-the-field-from-your-idp-first] Skillhabit can only map values the IdP actually sends. Use [Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens) for Microsoft Entra (optional claims + Graph properties), Okta, Auth0, generic OIDC, and SCIM attribute paths. *** ### Related [#related] * [Introduction](/docs/external-identity-providers) — SSO vs provisioning * [Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens) * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [External API](/api-reference) * [API Keys](/docs/configure/api-keys) * [Users & Groups](/docs/users-and-groups) # Attempt Limits (https://docs.skillhabit.com/docs/learn/attempt-limits) ### What This Is For [#what-this-is-for] **Attempt limits** cap how many times you may **start** a course (or similar limited content). This page explains how attempts are counted, which confirmations you see, what happens when you run out, and how **content licenses** reset or consume attempts. Attempt limits are **not** the same as visibility or licenses. You can see content and still be blocked by attempts—or hold a license and still need attempts remaining. ### Who This Is For [#who-this-is-for] **Learners** facing attempt counters or lockouts, and **administrators** who set limits in **Create** or unlock people in **Users & Groups**. ### How Attempts Are Counted [#how-attempts-are-counted] When a course has a maximum number of attempts, the overview shows how many you have left—for example **3 attempts remaining**, **1 attempt remaining**, or **No attempts remaining**. Important rules: 1. **Starting** counts as an attempt—not only finishing or failing. 2. **Restart** cancels the current participation and starts again, which also uses attempt rules for the new start. 3. Unlimited courses hide the attempt subtitle entirely. 4. Until you **first start** with a new license that resets attempts, remaining counts may be **hidden** so the overview does not show a misleading pre-license number. Meetups and programs use different primary actions; program **inner** courses can still have their own attempt limits under a program license. *** ### Confirmations When You Start [#confirmations-when-you-start] When attempts remain and you are about to start (status **Not started** or after a **Failed** result), Skillhabit may ask you to confirm: | Dialog | When | | ----------------------------- | -------------------------------------------------------------------------------------------- | | **Use Attempt?** | Starting will use one of your remaining attempts (body text includes how many you have left) | | Same dialog, stronger wording | You are about to use your **last** remaining attempt | Buttons: **Cancel** or **Confirm**. ### When Attempts Are Exhausted [#when-attempts-are-exhausted] | Surface | What you see | | ---------------------- | --------------------------------------------------------------------------------------- | | Overview alert | **No Attempts Remaining** — you have used all available attempts and cannot start again | | Start / restart dialog | **No Attempts Remaining** — ask an **administrator** to unlock the course | | Results after a fail | Retry is blocked until attempts or a license path unlocks you | Administrators typically reset attempts from **Users & Groups** (not from **Learn** itself). Contact your workspace administrator—not Skillhabit support—unless your organization told you otherwise. *** ### Licenses and Attempts [#licenses-and-attempts] If the content (or a **program** you are taking) uses an **Academy** **content license**: | Moment | What happens | | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | | **First start** with that active license | Attempts reset to the **maximum** for that content—**once per license**, even if you still had attempts left before | | Later starts under the **same** license | No second automatic refill | | Using your **last** allowed attempt without passing | Can **consume** the license; then you need a new license (for example another purchase) | | Restart without an active license | **Need a license to restart** — use **Buy License** to open the Academy product; once the license is active you can restart from **Learn** | | Results / overview when attempts are gone and licenses apply | **Buy License** | Paid catalog licenses are issued when the **order completes** in **Academy**. Admins can also add licenses (which also grants **individual visibility** in **Learn**). The overview **License Information** section explains whether you have an active license and when it expires. Full product rules: [Content Licenses](/docs/academy/content-licenses), including [Attempt Resets](/docs/academy/content-licenses#attempt-resets-when-starting-with-a-license). ### Programs and Inner Attempts [#programs-and-inner-attempts] * **One program license** covers the whole program. * Exhausting attempts on a **single** included item can **consume** that program license. * The first start with a program license only resets **inner** content that had already run out of attempts—items that still have attempts left are **not** refilled. * Starting content **inside** a licensed program requires a **program** license, even if you already hold a standalone license for that inner course. Details: [Programs](/docs/learn/programs). ### Related [#related] * [Visibility in Learn](/docs/learn/visibility) * [Taking Courses](/docs/learn/taking-courses) * [Programs](/docs/learn/programs) * [Content Licenses](/docs/academy/content-licenses) * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) # Learn (https://docs.skillhabit.com/docs/learn) ### What Learn Is For [#what-learn-is-for] **Learn** is where you take the content you’re enrolled in—whether an administrator assigned it or you picked it up in **Academy**. Open **Your library**, track progress, answer reflection questions, and move through courses, SCORM packages, programs, and meetups. ### Who Uses Learn [#who-uses-learn] Primarily **learners**. Administrators and managers usually configure visibility, mandatory assignments, and licenses elsewhere (**Create**, **Users & Groups**, **Academy**), then check progress in **Analyze** or **Follow Up**. ### Guides [#guides] * [Visibility in Learn](/docs/learn/visibility) — what shows in your library, licenses vs visibility, and **Buy License** when access is blocked * [Taking Courses](/docs/learn/taking-courses) — find content, start built-in and SCORM courses, results and certificates * [Attempt Limits](/docs/learn/attempt-limits) — how attempts are counted, confirmations, resets, and licenses * [Programs](/docs/learn/programs) — steps, journey maps, locked parts, and program licenses * [Meetups](/docs/learn/meetups) — occasions, attendance, and certificates after the event ### Where to Click First [#where-to-click-first] 1. Open **Learn** from the app menu (or continue from **Home**). 2. Use search and filters on **Your library**, or open a card to see the overview. 3. Choose **Start Now**, **Continue**, **Attend**, or **View**—depending on the content type and your status. ### Related Use Cases [#related-use-cases] * [Take a Course as a Learner](/docs/use-cases/take-a-course) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) # Meetups (https://docs.skillhabit.com/docs/learn/meetups) ### What This Is For [#what-this-is-for] A **meetup** is live or scheduled learning with one or more **occasions** (date, time, and location or online link). This page covers the **learner** path in **Learn**: choosing an occasion, confirming attendance, unattending, and what happens after the facilitator records results. Facilitators and administrators confirm the official **Attendance list** in **Follow Up**—that step is not done inside **Learn**. ### Who This Is For [#who-this-is-for] **Learners** who sign up for occasions. Administrators and facilitators who run the session should also read [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup). ### Before You Start [#before-you-start] * The meetup must be **visible** to you (or reachable from a **program**)—see [Visibility in Learn](/docs/learn/visibility). * Meetups **cannot** currently be marked **mandatory** the same way courses can—administrators still assign visibility. * Registration may close at a deadline; spots can sell out (**No spots left**, or a count such as **3 spots left**). *** ### Sign Up for an Occasion [#sign-up-for-an-occasion] 1. Open the meetup from **Your library** (filter **Type** → **Meetup** if needed). 2. On the overview, choose **Attend** when you are not yet attending. 3. In **Select an Occasion**, pick from **Upcoming** (and review **Past Occasions** when shown). Cards show date, time, location, and capacity chips such as **1 spot left** or **No spots left**. 4. Confirm the occasion. Success copy includes **Attendance confirmed successfully!** and may mention an email confirmation when your account can receive mail. 5. While you are signed up, the primary action becomes **View Occasion**. Status can show **Attending**. #### Occasion Details [#occasion-details] From **View Occasion** / **Occasion Details** you can typically: * **Join Online Meeting** when a link is provided (often available shortly before start—for example about **30 minutes** before—or after attendance rules your organization set) * **Download Calendar Event** * See registration messages such as **Registration open until…**, **Registration closed**, or cancellation blocked after the deadline #### Unattend [#unattend] If cancellation is still allowed: 1. Open **Unattend Occasion** (footer menu or occasion dialog). 2. Confirm **Unattend Occasion?** / that you want to unattend. 3. Your spot is released when the action succeeds. *** ### After the Event [#after-the-event] | Who | What they do | | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | **You (learner)** | Attend the occasion; keep **View Occasion** for details. **Learn** does not replace the facilitator’s attendance list. | | **Administrator / facilitator** | In **Follow Up**, open the meetup **Attendance list**, mark who attended, then **Submit attendance list**. After submit, the list cannot be changed. | People marked as attended can reach a completed / **Approved** outcome in **Learn** when the meetup is configured to pass attendees. Certificate issuance, when enabled in **Create**, follows that approved result. See [Meetup Attendance](/docs/follow-up/meetup-attendance) and [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup). ### Retaking and Restart [#retaking-and-restart] Unlike courses, meetups do **not** offer a course-style **Restart** in the overview footer. Once you have a **passing** result, you generally do not retake the same meetup participation the way you restart a failed course. New learning usually means another occasion or different content configured by your administrators. ### Certificates [#certificates] When issuance is enabled in **Create**: * You receive a certificate after attendance is confirmed through **Follow Up** and you are marked passing. * Expiration and recertification are set on the meetup in **Create**. * Download certificates from the **Certificates** app. Overview cards can show **Renew** when a certificate is expired or nearing expiry. ### Results in Learn [#results-in-learn] Attendance and completion status show on the meetup overview in **Learn**. There is no separate course-style results chapter list for meetups—use the overview and **Certificates** for outcomes. ### Related [#related] * [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup) * [Meetup Attendance](/docs/follow-up/meetup-attendance) * [Meetups in Create](/docs/create/supported-content-types/meetups) * [Visibility in Learn](/docs/learn/visibility) * [Follow Up](/docs/follow-up) # Programs (https://docs.skillhabit.com/docs/learn/programs) ### What This Is For [#what-this-is-for] A **program** is a learning path: ordered (or mapped) steps that can include courses, SCORM packages, meetups, and other parts. This page explains how you take a program in **Learn**, how **learning journey maps** work, and how **program licenses** differ from licenses on a single course. ### Who This Is For [#who-this-is-for] **Learners** enrolled in a program. Authors configure structure and maps in **Create**; sales and licensing live in **Academy**. ### Before You Start [#before-you-start] * You need **visibility** to the **program** itself (or an Academy path that grants it)—see [Visibility in Learn](/docs/learn/visibility). * Inner items may **not** appear as their own rows in **Your library**. That is normal: open them **from the program**. * If the program uses licenses, you need an active **program** license—not only a license for an inner course. *** ### Taking a Program [#taking-a-program] 1. Open the program from **Your library** (filter **Type** → **Program** if needed). 2. Review **Program Content**, **Next up**, **Upcoming Parts**, and **Completed Parts** as shown on the overview. 3. Choose **Start Now** the first time, then **Continue** while you are mid-path. Completed programs use **View** / overview actions rather than a course-style **Restart** of the whole program. 4. Move with **Previous Part** / **Next Part** (or open the part from the list). Locked steps show **Locked** or **Waiting** with unlock hints such as “Complete part name first” or a scheduled **Available on…** message. 5. Finish every required part. Programs themselves do not “fail” as a whole, but failing inner content can block completion until you retake that part (attempts and licenses permitting). You **cannot** restart the entire program from the footer the way you restart a course. You **can** restart individual courses/SCORM parts when those overviews allow **Restart**. When everything is done, you’ll see completion messaging such as **Congratulations!** / you’ve successfully completed all content inside the program. #### Visibility Inside a Program [#visibility-inside-a-program] Items inside the program may be hidden from the main library if you lack **standalone** visibility—you can still open them **from the program**. If a certificate is issued from that inner content, renewal may still work later through **Certificates** without a library tile. See [Visibility in Learn](/docs/learn/visibility). *** ### Learning Journey Maps [#learning-journey-maps] Some programs use a **learning journey map** (theme) instead of only a linear list. #### First Open [#first-open] The first time you enter the map, a short introduction can appear (welcome → how the map works → step order → ready). Actions include **Next**, **Back**, **Get Started**, and optionally **Don't show this introduction again**. You can show the introduction again later from map controls when available. #### Hotspots [#hotspots] | Behavior | What it means for you | | ---------------------------------- | ------------------------------------------------------------------------------------------------------ | | **Hotspots** on a background image | Steps on the journey; a hotspot may be text/media only, or it may link courses, SCORM, or meetups | | Linked hotspot on the map | Shows only whether **all** linked items are **done** or **not**—open the hotspot for per-item progress | | **Unordered** hotspots | Can open when available | | **Ordered** hotspots | Stay locked until you reach the right step in the map sequence | | Full-screen | Often available for complex maps | Authors set each hotspot’s title, description, and media in **Create**. Academy-facing map notes: [Programs With a Learning Journey Map in the Academy](/docs/academy/programs-with-a-learning-journey-map-in-the-academy). *** ### Program Licenses [#program-licenses] If the program came from **Academy** with licenses enabled: | Rule | Detail | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Coverage | **One program license** covers everything inside | | Consumed when | You successfully complete the program, you use the maximum attempts on **any** included item (without a pass where that applies), or the license **expires** before you finish | | First start with that license | Resets attempts only on **inner** content that had already exhausted its limit—items with attempts left are not refilled | | Starting inner content | Requires a **program** license; a standalone license for an inner course is **not** enough | | **Buy License** in program context | Opens the **program** product in **Academy** | Details: [Content Licenses](/docs/academy/content-licenses) and [Attempt Limits](/docs/learn/attempt-limits). ### Certificates [#certificates] Completing all components can earn a **program** certificate plus certificates for each item (when issuance is enabled). Download them from **Certificates**. ### Related [#related] * [Attempt Limits](/docs/learn/attempt-limits) * [Visibility in Learn](/docs/learn/visibility) * [Taking Courses](/docs/learn/taking-courses) * [Programs With a Learning Journey Map in the Academy](/docs/academy/programs-with-a-learning-journey-map-in-the-academy) * [Programs in Create](/docs/create/supported-content-types/programs) # Taking Courses (https://docs.skillhabit.com/docs/learn/taking-courses) ### What This Is For [#what-this-is-for] This guide covers **finding** courses in **Your library** and **taking** them: built-in Skillhabit courses and **SCORM** packages. You’ll see how start, continue, restart, results, certificates, and author updates affect you as a learner. For programs and live sessions, use [Programs](/docs/learn/programs) and [Meetups](/docs/learn/meetups). For attempt caps and Academy licenses, use [Attempt Limits](/docs/learn/attempt-limits). ### Who This Is For [#who-this-is-for] **Learners**. Administrators who assign or sell content should also skim [Visibility in Learn](/docs/learn/visibility) so library access matches what people expect. ### Before You Start [#before-you-start] * The course must be **visible** to you in **Learn** (or reachable from a **program** / renewal path)—see [Visibility in Learn](/docs/learn/visibility). * If the product uses **content licenses**, you need an **active license** as well as visibility. * If the course has **attempt limits**, starting uses an attempt—see [Attempt Limits](/docs/learn/attempt-limits). * If authors set **prerequisites**, you may see **Prerequisites Not Completed** until you finish at least one listed item—see [Prerequisites](/docs/create/prerequisites). *** ### Find Content in Your Library [#find-content-in-your-library] Open **Learn**. The start page is titled **Your library** (“What would you like to learn today?”). 1. Use **Search for content** to match keywords in the title. 2. Open filters (toggle **filters and sorting**) and narrow the list: | Filter | Options you’ll see | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | **Type** | **Course**, **Meetup**, **Program** — choosing **Course** also includes **SCORM** packages (SCORM still shows as **SCORM** on the card) | | **Requirement** | **Mandatory** or **Optional** | | **Status** | **Not started**, **Ongoing**, or **Finished** | | **Category** | Categories set by administrators | 3. Clear chips with **Clear filters** when you want the full list again. 4. Open a card to see the content overview and primary actions. If nothing matches, you’ll see **No content found**. *** ### Built-In Courses [#built-in-courses] #### Start, Continue, and Restart [#start-continue-and-restart] On the course overview, the footer shows your status and the main button: | Your status | Primary action | | -------------------------- | -------------------------------------- | | **Not started** | **Start Now** | | **In progress** | **Continue** | | **Approved** or **Failed** | **View** (results) | | Certificate **Expired** | **Renew** (when renewal is configured) | Overflow actions on courses (not programs or meetups): * **Restart** — resets progress and starts from the beginning (confirm with **Restart?**). If the content uses a license, the dialog warns that you lose your current result and need another active license to finish again. * **Cancel** — only while **In progress**; ends the current attempt without finishing. You do **not** need to finish in one sitting—progress is saved. If attempts remain, confirming **Start Now** can open **Use Attempt?** first. Details: [Attempt Limits](/docs/learn/attempt-limits). #### Pass, Fail, and Retry [#pass-fail-and-retry] * After you finish and the result is approved, open **View** (or **View Results**) to see chapter outcomes. * If you **Failed**, you can try again with **Restart Course** from results (when attempts and licenses allow). * After you **pass**, you typically only retake when certificate **renewal** points back at the same course (or related renewal content)—see [Renewal](/docs/certificates/renewal). #### Reflections [#reflections] Some courses include **Reflections** on the overview after you complete them—your answers (and any file uploads or reviewer comments). Managers review answers in **Follow Up**—see [Reflection Questions](/docs/follow-up/reflection-questions). As a learner you mainly see what you submitted. #### When Authors Publish an Update [#when-authors-publish-an-update] Authors choose how updates land. Learner impact: | Author choice | What you experience | | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Patch** (same revision) | In-progress learners usually **keep their place**; refresh to see updated text or media | | **New revision** | You may be moved to the new version and need to **restart** work; mid-course you can see **Oops — Course updated!** and must start the chapter again | | **Force reset results** (optional on publish) | Clears prior results, participation, and certificates for that content | After you already completed an older revision, results can show **New Version Available** with **View Latest Version**. Author-side detail: [Publishing Updates](/docs/create/supported-content-types/publishing-updates)—do not duplicate that setup here. #### Results and Certificates [#results-and-certificates] * Course results stay available from **Learn**. * When issuance is enabled, open certificates in the **Certificates** app (**View and Download**). * From **Certificates**, **Go to Learn** returns you to the library when you need to continue learning. *** ### SCORM Courses [#scorm-courses] * Launch and complete SCORM like other courses—Skillhabit provides access; the **package** controls its own screens and scoring. * Primary actions match courses: **Start Now**, **Continue**, **Restart**, **Cancel** (while in progress), then **View** for results. * Filtering: use **Type** → **Course** to include SCORM; cards still label the type **SCORM**. * After completion and approval, results and certificates work like built-in courses. For package-specific behavior (bookmarks inside the SCORM, quiz rules, and so on), ask the course creator. When a new SCORM package is published, in-progress learners are typically reset—authors control that publish path in **Create**. *** ### What You Should See Afterward [#what-you-should-see-afterward] * Library status moves from **Not started** → **Ongoing** → **Finished** (filter **Status**). * Overview status shows **Approved** or **Failed** after grading. * Certificates appear in **Certificates** when configured. * If a license or visibility block stops you, use the dialogs described in [Visibility in Learn](/docs/learn/visibility). ### Related [#related] * [Visibility in Learn](/docs/learn/visibility) * [Attempt Limits](/docs/learn/attempt-limits) * [Take a Course as a Learner](/docs/use-cases/take-a-course) * [Publishing Updates](/docs/create/supported-content-types/publishing-updates) * [View and Download](/docs/certificates/view-and-download) * [Reflection Questions](/docs/follow-up/reflection-questions) * [Prerequisites](/docs/create/prerequisites) # Visibility in Learn (https://docs.skillhabit.com/docs/learn/visibility) ### What This Is For [#what-this-is-for] **Visibility** decides whether content can appear in **Learn** for you at all. If you do not have visibility to a course, SCORM package, program, or meetup, it will **not** show as its own row in **Your library**—and a normal direct link will not open it for you either. This page separates visibility from **content licenses**, explains the exceptions (programs and certificate renewal), and shows what you see when access is blocked. ### Who This Is For [#who-this-is-for] **Learners** who need to understand why something is missing from **Learn**, and **administrators** who assign groups, individual visibility, or Academy products. ### Visibility vs Licenses (Do Not Mix Them Up) [#visibility-vs-licenses-do-not-mix-them-up] These checks answer different questions. Mixing them up is the most common “I bought it but can’t open it” mistake. | Check | What it controls | | -------------------- | --------------------------------------------------------------------------------------------------------------------------- | | **Visibility** | Whether you can **see** the content in **Learn** (and open it when no license is required) | | **Content licenses** | For **paid** Academy products with licenses enabled: whether you can **start and use** it after you already have visibility | | **Attempt limits** | How many times you may start—still enforced under a license | You normally need **both** visibility and a valid license for license-gated paid products. Full admin rules: [Content Licenses](/docs/academy/content-licenses). ### How You Get Visibility [#how-you-get-visibility] Typical paths (set by administrators or purchases): * **Group** or **individual visibility** in **Create** * An **Academy** purchase, enrollment, or approval that also grants access * An **admin-issued content license**, which also grants **individual visibility** in **Learn** Mandatory assignments use visibility plus a **mandatory** flag—see [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content). Completed mandatory content **stays mandatory**—it does not switch to optional after you finish. ### Exceptions (Reachable Without a Standalone Library Row) [#exceptions-reachable-without-a-standalone-library-row] | Situation | What happens | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Inside a program** | Items that belong to a **program** can still be opened **from that program** when you have access to the program—even if those same items never appear on their own in **Your library**. | | **Recertification** | If you earned a certificate from content you only completed **inside a program**, your **issued certificate** can unlock configured **recertification** content from **Certificates** and renewal flows **without** standalone **Learn** visibility for that renewal item. See [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal). | A generic shared link still needs normal visibility (or a valid renewal path)—opening a URL alone does not bypass the rules. ### When Access Is Blocked [#when-access-is-blocked] If you open content you cannot use, **Learn** shows an access dialog. The title and button depend on **why** access failed: | Reason | Dialog title (typical) | What you can do | | -------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | **Visibility**, and the item (or the **program** you are in) is listed as an Academy product | **View in the Academy** | **Buy License** opens the Academy product page so you can view details, purchase, or request access—depending on how your organization set it up | | **Visibility**, and it is **not** an Academy product | **Not available** | **Close** only—ask an administrator for visibility | | You **already have visibility** but need a **license** | **License required** | **Buy License** (or ask an administrator) | | Generic / unknown denial | **Access required** | **Buy License** when a storefront exists; otherwise **Close** | On overviews that use licenses, the **License Information** section shows whether you have an active license and when it expires. The purchase button there is also **Buy License**. When you are viewing **inner** content under a program, **Buy License** points at the **program** product in **Academy**—not a separate storefront for the inner course. After a failed course attempt when attempts are gone and the course uses licenses, results and restart flows can also offer **Buy License**. ### Related [#related] * [Attempt Limits](/docs/learn/attempt-limits) * [Programs](/docs/learn/programs) * [Taking Courses](/docs/learn/taking-courses) * [Content Licenses](/docs/academy/content-licenses) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) # What Is Skillhabit? (https://docs.skillhabit.com/docs/overview) ### What Skillhabit Is [#what-skillhabit-is] **Skillhabit** helps organizations **manage, execute, and evidence** learning and certification obligations. It is built for regulated and quality-driven teams that need agile learning **and** compliance-grade control—not a generic LMS brochure. You assign mandatory learning, certify people (including external audiences such as distributors and service partners), renew credentials, and report completion with audit-friendly proof. Integration connects Skillhabit to your systems; evidence of who completed what—and when—is why buyers choose it. It includes full **learning management system (LMS)** capabilities (authoring, libraries, progress, groups, SSO), so searchers and buyers who still look for an LMS find what they need—without defining Skillhabit only as one. Day to day you build content in **Create**, assign it in **Learn**, prove and renew in **Certificates**, and follow results in **Analyze** / **Follow Up**. **Academy** is an optional storefront when you also sell or publish a catalog—useful, but not the core customer story. It is one product with several **apps**. Each app answers a different job. You open them from **Home** (the app launcher after sign-in). ### Who It Is For [#who-it-is-for] | Audience | Typical job | | ----------------------------------- | --------------------------------------------------------------------------------------------------- | | **Compliance / quality / L\&D** | Mandatory tracks, certificates with expiry and renewal, audit-friendly completion | | **Internal HR / operations** | Onboard and upskill staff, keep groups and managers aligned | | **Partner and reseller enablement** | Certify distributors and external technicians on your products and keep credentials current | | **Customer success / education** | Structured adoption paths with proof of readiness | | **Commercial training (optional)** | Sell courses and programs in **Academy** with checkout and licenses—when sales is part of the model | Within a workspace you will usually meet **learners** (take content), **collaborators** (edit content in **Create**), **managers** (oversee groups), and **administrators** (own settings in **Configure** and **Users & Groups**). ### What Problems It Solves [#what-problems-it-solves] Skillhabit is built for organizations that must show people are **ready**—and prove it: * **Certification and renewal** — issue certificates, set validity, and run renewal paths before or after expiry * **Compliance tracks** — mark targets **Mandatory**, invite clearly, remind unfinished work, and report in **Analyze** * **Create once, assign clearly** — publish courses, SCORM, programs, and meetups, then decide who sees them and whether each target is **Mandatory** or optional * **Keep people organized** — users, **Manual Groups**, **Smart Groups**, managers, and **App access** in one place * **See what happened** — progress in **Analyze**, reflections and meetup attendance in **Follow Up** * **Connect to your identity world** — provisioning and sign-in via [External Identity Providers](/docs/external-identity-providers) when a directory or IdP should own accounts * **Sell when you need to** — an **Academy** catalog with payments and approvals, separate from the day-to-day **Learn** library (bonus for commercial programs; not required for mandatory tracks) **Mandatory** and **optional** are both real settings on a visibility target. Marking content **Mandatory** invites people and tracks completion; optional only grants visibility. One did not replace the other. ### How the Apps Fit Together [#how-the-apps-fit-together] Think of the apps as a map, not a feature list. Start on [Home](/docs/welcome), then go where the job lives. | App | Question it answers | Hub | | ------------------ | -------------------------------------------------------------- | ---------------------------------------- | | **Home** | Where do I go next? (launcher + personal learning overview) | [Home](/docs/welcome) | | **Learn** | What can I take day to day? | [Learn](/docs/learn) | | **Create** | How do we author, publish, and set **Visibility and targets**? | [Create](/docs/create) | | **Certificates** | What credentials do I hold, and what renews? | [Certificates](/docs/certificates) | | **Analyze** | How are people progressing? | [Analyze](/docs/analyze) | | **Follow Up** | What needs human review (reflections, meetup attendance)? | [Follow Up](/docs/follow-up) | | **Users & Groups** | Who is in the workspace, and how are they organized? | [Users & Groups](/docs/users-and-groups) | | **Configure** | How does the workspace look, speak, and connect? | [Configure](/docs/configure) | | **Academy** | What can people browse, buy, or request? (optional storefront) | [Academy](/docs/academy) | A short path many compliance and L\&D teams follow: brand and defaults in **Configure** → people and groups in **Users & Groups** → content, **Mandatory** targets, and certificates in **Create** → learners work in **Learn** → proof in **Certificates** / **Analyze** / **Follow Up**. Add **Academy** only when you need a public or paid catalog. Step-by-step: [Startup Guide](/docs/getting-started). ### 30-Day Free Trial [#30-day-free-trial] Try Skillhabit for **30 days** with full features for up to **10 users**. Use the trial to brand the workspace, invite a small group, publish one course, assign it as **Mandatory**, and issue or renew a certificate—then decide if the product fits. ### Application Updates [#application-updates] Skillhabit updates in the browser—no separate install. * **When checks run**: On open or reload, and about every **10 minutes** while a tab stays open online. * **When an update is available**: You may see **A new Skillhabit version is available** in the main menu, and on pages with a footer version, a **Reload to update** button. * **Applying the update**: Happens when you **reload** or **switch** apps. Use **Reload to update** if you want it immediately. * **Version label**: Footer and menu show the running **Skillhabit version** and, on hover/tooltip, when that build was released. ### Where to Go Next [#where-to-go-next] * **[Startup Guide](/docs/getting-started)** — ordered first-week path with real UI labels * **[Use Cases](/docs/use-cases)** — job-based recipes (“onboard a department”, “renew a certificate”, …) * **[Reference](/docs/reference)** — roles, visibility matrix, glossary, notifications, limits * **[External Identity Providers](/docs/external-identity-providers)** — provisioning vs SSO when IT owns identity * **[Trust & Security](/docs/trust-and-security)** — GDPR, ISO 27001, EU hosting, and status * **[AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy)** — OpenAI processing and safe use for AI authoring * **[Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email)** — IT guide so important mail reaches inboxes # Supported File Types and Sizes (https://docs.skillhabit.com/docs/reference/file-types) ### What This Is For [#what-this-is-for] This page lists **which file types Skillhabit accepts** and the **maximum size** for each category when you upload in the product UI. Use it when preparing media, choosing a SCORM package, or answering “why won’t this file upload?” It does **not** walk through authoring steps—those live in **Create** and related guides linked below. ### Who This Is For [#who-this-is-for] * **Collaborators and administrators** uploading into **Create** (courses, SCORM, programs, certificate attachments) * **Learners and reviewers** who attach files to reflection answers or comments (where the course allows it) * Anyone checking limits before a large video or SCORM package upload ### Limits by Category [#limits-by-category] Sizes below are the ceilings enforced in the Create (and shared) upload UI. Stay under the limit for your category; larger files are rejected before upload finishes. | Category | Max size | Accepted types | Typical use | | ----------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | | **SCORM packages** | **2.5 GB** | `.zip` (SCORM **1.2** or **2004**; manifest at package root) | Import external courses in **Create** → SCORM | | **Video** | **2 GB** | Standard video formats (`video/*`—for example `.mp4`, `.mov`, `.avi`) | **Video** building blocks; also journey hotspot media | | **Audio** | **100 MB** | Standard audio formats (`audio/*`—for example `.mp3`, `.wav`) | **Audio** building blocks; also journey hotspot media | | **Images** | **10 MB** | `.png`, `.jpg` / `.jpeg`, `.gif`, `.svg`, `.webp`, `.avif`, `.apng` | Image building blocks, posters, journey images, branding-style pickers | | **Documents (course File element)** | **100 MB** | `.pdf`, `.doc`, `.docx`, `.rtf`, `.xls`, `.xlsx`, `.ppt`, `.pptx`, `.zip`, `.txt`, `.xml`, `.yml` | **File** building blocks learners can download | | **Video captions** | **5 MB** | `.vtt` (WebVTT) | Subtitles / closed captions on a **Video** element | | **Reflection attachments** | **50 MB** | `.xlsx`, `.xls`, `.jpg`, `.jpeg`, `.png`, `.gif`, `.webp`, `.svg`, `.bmp`, `.avif`, `.heic`, `.heif`, `.doc`, `.docx`, `.ppt`, `.pptx`, `.txt`, `.pdf` | Learner (and reviewer) file uploads on reflection questions that allow attachments | | **AI Course Studio source files** | **10 MB** | `.pdf`, `.doc`, `.docx`, `.txt` | Optional source uploads when drafting with **AI Course Studio** | **Certificate attachments** (extra documents issued with a certificate) accept **PDF**, **Word** (`.doc` / `.docx`), **plain text**, **PNG**, and **JPG**. The certificate attachment picker does not surface a separate size label in the UI the way building-block uploads do—keep files modest and prefer the document/image categories above as a guide. ### Recommended Image Dimensions [#recommended-image-dimensions] Skillhabit crops many uploads to a fixed aspect ratio. Prepare assets at (or above) these sizes so they stay sharp after crop. Smaller files still upload if they stay under **10 MB**, but the cropper may upscale or look soft. | Use | Recommended size | Aspect | Notes | | --------------------------------------------- | ------------------------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------ | | **Course / program / SCORM / meetup preview** | **1800 × 1000** | **9∶5** (1.8) | Content card and overview image in **Create** | | **Academy collection cover** | **1800 × 1000** | **9∶5** (1.8) | Same ratio as content previews | | **Home welcome image** | **2000 × 400** | **5∶1** | **Configure** → **Customization** → **Welcome message** | | **Academy storefront cover** | **2000 × 400** | **5∶1** | Academy admin welcome / cover section | | **Brand logo** | **2000 × 300** | Wide banner | **Configure** → **Customization** → **Brand logo** (no forced crop—prefer a logo that reads on a wide strip) | | **Registration page image** | **1024 × 1024** | **1∶1** | **Configure** → registration path details | | **Course image building blocks** | **1800 × 1000** (slideshow) or **square** (grid / image+text) | **9∶5** or **1∶1** | Depends on the element; the picker shows the crop shape | | **Video posters** | **1280 × 720** | **16∶9** | Matches the in-course video frame | Tips: * Export **PNG** or **JPEG** for photos; **SVG** or **PNG** for logos when you need crisp edges. * Keep important subject matter in the center—edges are most likely to be cropped on responsive layouts. * Stay under the **10 MB** image limit in [Limits by Category](#limits-by-category). ### Where Uploads Apply [#where-uploads-apply] | Place in the product | What you upload | Limits to use | | -------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | | **Create** → built-in course → **Add element** | **File**, **Image** (and image variants), **Audio**, **Video** | Documents, images, audio, video (+ captions on video) | | **Create** → **SCORM** item | SCORM `.zip` package | SCORM packages | | **Create** → program **learning journey** hotspot | Image, video, or audio for hotspot media | Video / audio / image rows (UI allows a single high ceiling; stay within the category you are uploading) | | **Create** → content **Certificate issuance** → **Certificate attachments** | Optional extra document on the issued certificate | Certificate attachments (types above) | | **Create** → **AI Course Studio** | Optional PDF / Word / text sources | AI Course Studio source files | | **Learn** → course **Reflections** (and **Follow Up** comments when files are allowed) | Learner or reviewer attachments | Reflection attachments | Branding and welcome images in **Configure** use the shared image picker (**10 MB**, same image formats). Recommended pixel sizes for logos, welcome banners, and content previews are in [Recommended Image Dimensions](#recommended-image-dimensions). How-tos: [Branding](/docs/configure/branding) and [Welcome Banner](/docs/configure/welcome-banner). ### Tips [#tips] * Prefer **compressed** video (for example H.264 `.mp4`) when approaching the **2 GB** ceiling. * SCORM must be a **ZIP** with a valid **1.2** or **2004** manifest at the **root** of the archive—not a nested folder-only package. * A `.zip` under **Documents** is a downloadable file for learners; it is **not** the same path as importing **SCORM**. * If upload fails near the limit, check the file’s true size on disk and that the extension matches the category you are uploading into. ### Related [#related] * [Building Blocks](/docs/create/supported-content-types/building-blocks) * [SCORM](/docs/create/supported-content-types/scorm) * [Certificate Configuration](/docs/create/certificate-configuration) * [AI Course Studio](/docs/create/ai-powered-creation/ai-course-studio) * [Reflection Questions](/docs/follow-up/reflection-questions) * [Reference](/docs/reference) # Glossary (https://docs.skillhabit.com/docs/reference/glossary) ### What This Is For [#what-this-is-for] Short definitions for terms you see in Skillhabit and in these docs. Prefer the **exact UI label** in bold when one exists. ### Who This Is For [#who-this-is-for] Anyone new to the product, translators, and support writing consistent answers. ### Product Positioning [#product-positioning] | Term | Meaning | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | **Workforce readiness platform (WRP)** | Category label for Skillhabit: learning and certification with compliance-grade control and proof of readiness | | **Learning & certification execution** | How Skillhabit talks about the job: manage, execute, and evidence training requirements—not a generic AI LMS | | **LMS** | Learning management system capabilities Skillhabit includes (authoring, libraries, progress, groups, SSO)—kept for discovery; not the only story | | **Workspace** | One Skillhabit customer environment (people, content, settings) | ### Apps (UI Names) [#apps-ui-names] | Term | Meaning | | ------------------ | --------------------------------------------------------- | | **Home** | App launcher and personal learning overview after sign-in | | **Learn** | Day-to-day library where people take content | | **Create** | Authoring app for courses, SCORM, programs, meetups | | **Certificates** | App where holders view, download, and renew credentials | | **Analyze** | Progress and statistics (American spelling in the UI) | | **Follow Up** | Two words—reflections and meetup attendance review | | **Academy** | Optional storefront for browse / buy / request | | **Users & Groups** | Ampersand and capital **G**—people and groups | | **Configure** | Workspace settings and connections | ### People [#people] | Term | Meaning | | ----------------------------- | ----------------------------------------------------------------- | | **user** | One Skillhabit account | | **learner** | Someone taking content (not a separate account type) | | **administrator** / **Admin** | Full workspace control | | **manager** | Oversees assigned groups; optional Analyze / approval permissions | | **collaborator** | Can edit a specific content item in **Create** | | **App access** | Per-app cards on a profile for non-admins | ### Content and Publishing [#content-and-publishing] | Term | Meaning | | -------------------------- | -------------------------------------------------------------------- | | **course** | Built-in Skillhabit course | | **SCORM** | Imported SCORM package treated as its own content type | | **program** | Path that combines courses, SCORM, and meetups | | **meetup** | Live / occasion-based learning | | **draft** / **published** | Authoring state in **Create** | | **Visibility and targets** | Who can see content and whether each target is mandatory or optional | | **collection** | Academy catalog grouping | | **attribute** | Custom user field (often used by **Smart Groups**) | | **occasion** | A scheduled instance of a meetup | ### Enrollment and Status Words [#enrollment-and-status-words] | Term | Meaning | | ----------------------------- | ---------------------------------------------- | | **mandatory** | Required target—invite, track, remind | | **optional** | Visible when allowed; not required | | **enrolled** | Has an enrollment relationship to the content | | **Not started** | Can see it; has not begun | | **In progress** / **started** | Begun; not successfully finished | | **Approved** | Completed successfully (certificate may issue) | | **Failed** | Did not pass; may need another attempt | | **Expired** | Certificate past validity; retake / renew | ### Access Concepts [#access-concepts] | Term | Meaning | | ----------------------------- | ------------------------------------------------------------------------------------------------ | | **visibility** | Permission to see / open content in **Learn** (with exceptions for programs and recertification) | | **content license** | Time-bounded paid use on top of visibility | | **Smart Group** | Membership from attribute rules | | **Manual Group** | Membership you assign by hand | | **External group** | Membership owned by a directory / sync | | **Approved for Sign Up** | Domains allowed to auto-create accounts on first qualifying sign-in | | **`@noemail.skillhabit.com`** | Placeholder domain—Skillhabit never sends system email there | ### Related [#related] * [Roles & App Access](/docs/reference/roles-and-app-access) * [Progress & Certificate States](/docs/reference/progress-and-certificate-states) * [What Is Skillhabit?](/docs/overview) # Reference (https://docs.skillhabit.com/docs/reference) ### What Reference Is For [#what-reference-is-for] **Reference** holds **lookup** material: matrices, catalogs, ceilings, and definitions. It is not a tutorial for an app. Use the **app hubs** when you need steps. Use **Reference** when you need “what does this label mean?” or “what’s the limit?” in one place. ### Who This Is For [#who-this-is-for] Administrators, support, integrators, and anyone troubleshooting across apps. ### Pick a Guide [#pick-a-guide] | Need | Guide | | ---------------------------------------------- | ------------------------------------------------------------------------------------- | | Product terms and UI labels | [Glossary](/docs/reference/glossary) | | Admin, Manager, collaborator, App access | [Roles & App Access](/docs/reference/roles-and-app-access) | | Visibility vs mandatory vs Academy vs licenses | [Visibility, Mandatory & Licenses](/docs/reference/visibility-mandatory-and-licenses) | | Analyze statuses and certificate expiry labels | [Progress & Certificate States](/docs/reference/progress-and-certificate-states) | | Magic Links, SSO, API links, `@noemail` | [Sign-In & Email Identifiers](/docs/reference/sign-in-and-email-identifiers) | | Every product email and where you bind it | [Notifications](/docs/reference/notifications) | | API keys, webhooks, trial, cadences, quotas | [Limits & Quotas](/docs/reference/limits-and-quotas) | | Upload formats and max sizes | [Supported File Types and Sizes](/docs/reference/file-types) | ### Related [#related] * [What Is Skillhabit?](/docs/overview) * [FAQ](/docs/faq) * [External API](/api-reference) — machine-readable API docs (separate from this lookup section) # Limits & Quotas (https://docs.skillhabit.com/docs/reference/limits-and-quotas) ### What This Is For [#what-this-is-for] Numbers and ceilings that are easy to lose across how-tos. If a limit is **capability-gated**, Skillhabit must enable the feature for your account first. ### Who This Is For [#who-this-is-for] **Administrators**, integrators, and support checking “how many can we have?” ### Account and Trial [#account-and-trial] | Limit | Value | | ----------------- | ------------------ | | Free trial length | **30 days** | | Free trial users | Up to **10 users** | ### Connections [#connections] | Limit | Value | Notes | | -------------------------- | -------------- | ---------------------------------- | | Active **API Credentials** | Up to **3** | Delete one before creating another | | **Webhooks** | Up to **5** | Feature must be enabled | | Webhook endpoint | **HTTPS** only | | ### Configure [#configure] | Limit | Value | | ------------------------------- | ------------------------ | | Custom attributes per workspace | Up to **20** | | Text attribute value | Up to **500** characters | ### Create [#create] | Limit | Value | | ------------------------------ | ---------------------------------------------------------------------------------------------- | | Prerequisites per content item | Up to **30** | | Anonymous survey results | Hidden until **at least 3** responses | | AI Course Studio source file | **10 MB** (`.pdf`, `.doc`, `.docx`, `.txt`); provider may retain submissions up to **30 days** | Upload size ceilings (SCORM, video, images, …): [Supported File Types and Sizes](/docs/reference/file-types). ### Email Cadences (Platform) [#email-cadences-platform] | Email | Cadence | | ----------------------------------------------- | --------------------------------------------------------------------------------------------------- | | **New Content Notification** (mandatory assign) | Batched about every **15 minutes** | | **Certificate Expiration Notification** | Wed **10:00 (GMT+1)**, **1st & 3rd** week of the month, from **\~3 months** before expiry | | **Content Reminder Notification** | Wed **10:00 (GMT+1)**, **2nd & 4th** week (when enabled) | | **User Archived Soon Notification** | About **3 days** before Auto Archive | | **Deletion Notifications** (admins) | **3 days** before auto-deletion of archived users | Full catalog: [Notifications](/docs/reference/notifications). ### Certificates (Learner UI) [#certificates-learner-ui] | Behavior | Approximate window | | ----------------------------------------- | -------------------------------------------------------------------------- | | Expiry reminders begin | **3 months** before expiry | | **Recertify** offered instead of download | Expired, or within about **90 days** of expiry, when renewal is configured | ### External API (Enums Worth Knowing) [#external-api-enums-worth-knowing] App access ids on the API (not always identical to UI spelling): `LEARN`, `CREATE`, `ANALYSE`, `FOLLOW_UP`, `ACHIEVEMENTS` — [Create a User and Sign-In Link](/api-reference/examples/create-user-and-sign-in-link). ### Related [#related] * [Supported File Types and Sizes](/docs/reference/file-types) * [API Keys](/docs/configure/api-keys) * [Webhooks](/docs/configure/webhooks) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) # Notifications (https://docs.skillhabit.com/docs/reference/notifications) ### What This Is For [#what-this-is-for] A **lookup** of every product notification you can customize or trigger in Skillhabit—plus where you bind each one in the UI. Use this when you need “what emails exist?” or “what turns this email on?” For editing template copy and optional toggles, open **Configure → Email Notifications**: [Configure → Notifications](/docs/configure/notifications). ### Who This Is For [#who-this-is-for] **Administrators** planning learner and admin mail, and support teams answering “why did I get this email?” ### How Binding Works [#how-binding-works] Skillhabit does not use a separate “bind notification” screen. You attach mail by: 1. Editing (and optionally enabling) a template under **Configure → Email Notifications** 2. Taking a product action that triggers that template (Mandatory targets, invite checkbox, Auto Archive, and so on) Delivery still needs a real mailbox and an **active** email status. **`@noemail.skillhabit.com`** never receives mail — [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). *** ## Configure → Email Notifications (Templates) [#configure--email-notifications-templates] **UI:** **Configure** → **Customize Your Workspace** → **Email Notifications** | Email (exact label) | Always on? | When it sends | Who receives it | What binds / enables it | | --------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | | **Welcome Invitation** | Yes (copy only) | When you invite users or change a user’s email—**not** when someone is added with no invitation | The invited / updated user | **Users & Groups**: **Send a welcome email with a login link** on create; **Send welcome email** on a profile | | **New Content Notification** | Yes (copy only) | Mandatory content newly assigned; batched about every **15 minutes**; skipped if already required or already passed | Targeted learners | **Create** → **Visibility and targets** → **Content is mandatory** | | **Certificate Expiration Notification** | Yes (copy only) | Wed **10:00 (GMT+1)**, **1st & 3rd** week of the month, from **3 months** before expiry; stops on renew or learner silence | Certificate holders with expiry | **Create** certificate validity / recertification; learner **Enable** / **Disable notifications** in **Certificates** | | **Content Reminder Notification** | Optional toggle | Wed **10:00 (GMT+1)**, **2nd & 4th** week; unfinished mandatory; skipped if passed | Learners with unfinished mandatory content | Turn the card **on** in **Email Notifications**; content must already be **Mandatory** | | **User Archived Soon Notification** | Optional toggle | About **3 days** before Auto Archive archives an inactive account | The user about to be archived | **Configure** → **User Management** → **Auto Archive** + template enabled | | **User Archived Notification** | Optional toggle | When the account is archived | The archived user | Same Auto Archive path + template enabled | How-to for copy and toggles: [Configure → Notifications](/docs/configure/notifications).\ Mandatory assignment timing: [Automated Course Notifications](/docs/create/automated-course-notifications).\ Reminder cadence: [Mandatory Content Reminders](/docs/create/mandatory-content-reminders).\ Expiry cadence: [Certificates → Notifications](/docs/certificates/notifications). *** ## Create (Triggers and One-Shot Notify) [#create-triggers-and-one-shot-notify] | Where in Create | Control / label | What happens | Audience | | ---------------------------------------------------------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | Content → **Visibility and targets** | **Content is mandatory** | Queues **New Content Notification** after the requirement is active | Targeted users / group members | | Program → **Scheduled Unlocks** | Enable schedule | Each unlock follows that person’s start date; they get **automated notifications** when a new part becomes available | Program participants | | Course / SCORM → publish new revision | **Notify users via email** | Email about the content change | Users who already have a result (started / completed) | | Course → publish unpublished changes on a published course | **Send email notifications with results to all users** | Email about the published edit | Users with results | | Certificate issuance / Activate recertification | Validity duration | Sets expiry that feeds **Certificate Expiration Notification** | Completers who earn that certificate | Related how-tos: [Enrollment and Notifications](/docs/create/enrollment-and-notifications) · [Publishing Updates](/docs/create/supported-content-types/publishing-updates) · [Programs](/docs/create/supported-content-types/programs) · [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal). *** ## Users & Groups [#users--groups] | Where | Control / label | Template / mail | Audience | | ------------------------------------ | ------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ----------------------- | | Create users / by email | **Send a welcome email with a login link** | **Welcome Invitation** | New users | | User profile | **Send welcome email** | **Welcome Invitation** (resend) | That user | | Start → **Send Content Invitations** | Invitation dialog | Ad-hoc invite email for **optional** visibility (separate from mandatory **New Content Notification**) | Selected users / groups | *** ## Certificates [#certificates] | Where | Control | What | | ---------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------- | | **Certificates** → Active / Expired rows with expiry | **Enable notifications** / **Disable notifications** | Turns **Certificate Expiration Notification** on or off **for that certificate only** | Default for expiring certificates is **on**. How-to: [Certificates → Notifications](/docs/certificates/notifications). *** ## Academy [#academy] | Where | Control / label | What | Audience | | -------------------------------- | ------------------------ | --------------------------------------------------------------- | ----------------------- | | **Manage Academy** → **Payment** | **Order Notifications** | Email when a new **paid** order is created | Selected administrators | | Checkout / order approval | Purchase / confirm flows | Receipt or “order received” style customer mail (commerce path) | Buyer / enrollee | Details: [Academy Notifications](/docs/academy/notifications). Academy order settings do **not** control Create mandatory mail. *** ## Configure → User Management (Admin Alerts) [#configure--user-management-admin-alerts] | Where | Control / label | What | Audience | | ------------------------------------------------------ | -------------------------- | -------------------------------------------------- | ----------------------- | | **Configure** → **User Management** (Auto Deletion on) | **Deletion Notifications** | Email **3 days** before archived users are deleted | Selected administrators | Lifecycle emails to the archived user still use the **User Archived Soon** / **User Archived** templates above. Setup: [Auto Archive](/docs/configure/auto-archive). *** ## Analyze (Ad-Hoc) [#analyze-ad-hoc] | Where | Control | What | | ------------------- | --------------- | ----------------------------------------------------------------------------------------------- | | **Analyze** results | **Email users** | Compose subject/body and send to the filtered result set—not one of the six Configure templates | *** ## Follow Up [#follow-up] | Trigger | Mail | Audience | | ------------------------------------------ | ----------------------------------- | ---------------------------------- | | Someone comments on a learner’s reflection | Subject **New reflection comments** | The learner who wrote the response | Not configured under **Email Notifications**. Details: [Follow Up → Notifications](/docs/follow-up/notifications). *** ## Not Configured as Email Templates Here [#not-configured-as-email-templates-here] | Area | Notes | | ---------------- | --------------------------------------------------------------------------------------------------------- | | **Meetups** | No admin email-template cards for occasions or attendance in Configure | | **Webhooks** | Outbound HTTP events, not email — [Webhooks](/docs/configure/webhooks) | | **External API** | Can create users and sign-in links; does not replace Email Notifications — [External API](/api-reference) | *** ## Quick “I Need To…” Map [#quick-i-need-to-map] | Goal | Start here | | ---------------------------------------------------- | ------------------------------------------------------------------------- | | Change invite / reminder wording | [Configure → Notifications](/docs/configure/notifications) | | Stop corporate filters from blocking Skillhabit mail | [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) | | Make mandatory assignment mail fire | [Enrollment and Notifications](/docs/create/enrollment-and-notifications) | | Turn on unfinished-mandatory reminders | [Mandatory Content Reminders](/docs/create/mandatory-content-reminders) | | Silence expiry mail for one certificate | [Certificates → Notifications](/docs/certificates/notifications) | | Warn before Auto Archive | [Auto Archive](/docs/configure/auto-archive) | | Admin mail for paid Academy orders | [Academy Notifications](/docs/academy/notifications) | | Push events to your system instead of email | [Webhooks](/api-reference/webhooks) | ### Related [#related] * [Configure → Notifications](/docs/configure/notifications) * [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) * [Supported File Types and Sizes](/docs/reference/file-types) * [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) # Progress & Certificate States (https://docs.skillhabit.com/docs/reference/progress-and-certificate-states) ### What This Is For [#what-this-is-for] Exact **status** and **enrollment** labels you see in **Analyze → User results**, plus how they relate to certificates. Lookup only—filtering and email steps: [Progressions](/docs/analyze/progressions). ### Who This Is For [#who-this-is-for] **Administrators**, **managers**, and compliance reviewers reading progress lists. ### Result Statuses [#result-statuses] | Status (UI chip) | Meaning | | ---------------- | ---------------------------------------------------------------------------------------- | | **Not started** | The person can see the content in **Learn** but has not begun | | **In progress** | Started; not yet finished successfully | | **Approved** | Completed successfully (a certificate may be issued when the content is set up for that) | | **Failed** | Did not pass; they need to try again | | **Expired** | Certificate expired; the content needs to be retaken / renewed | Quick chips above the list (**All results**, **Not started**, **In progress**, **Approved**, **Failed**, **Expired**) filter the same values. ### Enrollment Labels (On the Row) [#enrollment-labels-on-the-row] | Label | Meaning | | ---------------- | ----------------------------------------------------- | | **Mandatory** | This person × content is a mandatory target | | **Optional** | Visible / enrolled as optional | | **Not enrolled** | No enrollment relationship for that row context | | Archive icon | User is archived (tooltip: **This user is archived**) | Archived users are **hidden by default** in Analyze until you include them. ### Certificates vs Progress Status [#certificates-vs-progress-status] | Concept | Where you see it | Notes | | ------------------------------ | ------------------------------ | ---------------------------------------------------------------------------- | | **Approved** result | **Analyze** | Successful completion; may trigger certificate issuance | | Certificate **valid** / held | **Certificates** app + profile | Learner can download when download is offered | | Certificate **Expired** status | **Analyze** + **Certificates** | Drives renewal and expiry reminder window (\~3 months before) | | **Recertify** on a row | **Certificates** | Shown when expired or within \~90 days **and** renewal content is configured | Expiry reminder schedule: [Certificates → Notifications](/docs/certificates/notifications). Renewal UX: [Renewal](/docs/certificates/renewal). ### Who Sees Which Rows [#who-sees-which-rows] | Role | Scope | | ---------------------------- | --------------------------- | | Administrator | All workspace progressions | | Manager (+ permission) | Users in managed groups | | Collaborator (+ **Analyze**) | Content they collaborate on | ### Related Filters (Names Only) [#related-filters-names-only] **Content**, **Groups**, **Users**, **Status**, **Enrollment**, **Certificate expiration**, **Last status update**, **Attributes** — see [Progressions](/docs/analyze/progressions). ### Related [#related] * [Progressions](/docs/analyze/progressions) * [Content Statistics](/docs/analyze/content-statistics) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) * [Visibility, Mandatory & Licenses](/docs/reference/visibility-mandatory-and-licenses) # Roles & App Access (https://docs.skillhabit.com/docs/reference/roles-and-app-access) ### What This Is For [#what-this-is-for] A **lookup** of who can do what in Skillhabit. One account can wear several hats: roles and **App access** decide which apps open; collaborators and managers add scoped powers on top. How-tos: [Users and Profiles](/docs/users-and-groups/users-and-profiles) · [Managers](/docs/users-and-groups/managers) · [Collaborator Access](/docs/create/collaborator-access). ### Who This Is For [#who-this-is-for] **Administrators** designing access, and anyone asking “why can’t I open Analyze?” ### Roles and Flags [#roles-and-flags] | Control | Where you set it | What it unlocks | | ----------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | **Admin** | Profile → **App access** | Everything in the workspace. Per-app toggles are hidden while Admin is on. Admins can still take courses like anyone else. | | **Manager** | Profile → **App access**, then each group → **Managers** | Focused **Users & Groups** view for assigned groups only. Optional per-group permissions (below). Does **not** open full user profiles. | | **Standard user** | Default when not Admin | Only the apps granted under **App access** | | **Collaborator** | Content in **Create** → **Collaborate** | Edit and preview **that** course, SCORM, program, or meetup. Needs **Create** app access to use Create tools. | | **Creator** | Automatic on content you create | Same editing rights as a collaborator on that item | Turning **Manager** off fails while the person is still on any group’s manager list—remove them there first. ### App Access Cards [#app-access-cards] For non-admins, **App access** on the profile turns apps on or off. Typical cards: | App | Typical audience | Notes | | ------------------ | ------------------------------------ | ----------------------------------------------------------- | | **Home** | Almost everyone | Launcher + personal overview | | **Learn** | Learners | Day-to-day library | | **Certificates** | Learners with credentials | Holders view / renew; not the same as issuing in Create | | **Create** | Authors | Authoring; collaborators still need this app to open Create | | **Analyze** | Admins, managers, some collaborators | Scope depends on role (below) | | **Follow Up** | Reviewers | Reflections and meetup attendance | | **Users & Groups** | Admins (managers get a reduced view) | Directory and groups | | **Configure** | Admins | Workspace settings | | **Academy** | Admins / catalog browsers | Storefront; optional for mandatory and certification tracks | Workspaces may show additional cards depending on capabilities. ### Manager Permissions (Per Group) [#manager-permissions-per-group] | Permission | Effect | | ----------------------------------------- | --------------------------------------------------------------------------- | | **View group results in Analyze** | **Analyze** rows for users in this group (needs **Analyze** app access too) | | **Manage group members** | Add/remove members on **manual** groups | | **Approve content requests from Academy** | When Academy approval is enabled | ### Analyze Scope by Role [#analyze-scope-by-role] | Who | What they see in **Analyze** | | -------------------------------------------- | ------------------------------------------------------------------------------------- | | **Administrator** | Whole workspace | | **Manager** (+ permission + **Analyze** app) | All results for **users in managed groups** (not only content assigned via the group) | | **Collaborator** (+ **Analyze** app) | Progress for content they collaborate on | ### Quick Contrasts [#quick-contrasts] | Confused pair | Difference | | --------------------------------- | --------------------------------------------------------------------------------------------------------- | | **Manager** vs **Collaborator** | Manager = people/groups; Collaborator = edit specific content | | **Create** app vs **Collaborate** | App opens Create; Collaborate grants a specific item | | **Admin** vs many app toggles | Admin replaces per-app cards | | **Visibility** vs **App access** | Visibility = can they see this course in **Learn**?; App access = can they open the **Learn** app at all? | ### Related [#related] * [Users and Profiles](/docs/users-and-groups/users-and-profiles) * [Managers](/docs/users-and-groups/managers) * [Collaborator Access](/docs/create/collaborator-access) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [Visibility, Mandatory & Licenses](/docs/reference/visibility-mandatory-and-licenses) # Sign-In & Email Identifiers (https://docs.skillhabit.com/docs/reference/sign-in-and-email-identifiers) ### What This Is For [#what-this-is-for] A **decision table** for how people sign in and what email-shaped identifier Skillhabit needs. Setup steps live under identity and Configure guides linked below. ### Who This Is For [#who-this-is-for] **Administrators** and IT choosing login methods; integrators using API login links. ### Sign-In vs Provisioning [#sign-in-vs-provisioning] | Goal | Go here | | ----------------------------------------------------- | ---------------------------------------------------------------------------------- | | Create or sync users (and groups) on an ongoing basis | [User Provisioning](/docs/external-identity-providers/user-provisioning) | | Choose how people prove who they are at login | [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) | You often need **both**. ### Sign-In Methods [#sign-in-methods] | Method | Needs existing user? | Can first login create an account? | Needs real mailbox? | | --------------------------- | --------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------ | | **Login code** (Email) | No, if domain is approved | Yes, when email domain is under **Approved for Sign Up** | Yes | | **Magic Links** (Email) | No, if domain is approved | Yes, when email domain is under **Approved for Sign Up** | Yes | | **Microsoft** | No, if domain is approved | Yes, when Skillhabit’s picked email is on **Approved for Sign Up** | Prefer yes (notifications) | | **OpenID Connect** | No, if auto-create is on | Yes, when **More options** auto-create is enabled | Prefer a real `email` claim | | **External API login link** | Yes (create via API or other provision first) | Link only signs in; create user with **Users** API beforehand if needed | No—`@noemail.skillhabit.com` is fine | | **SAML** | Workspace-specific | Contact Skillhabit if offered | Depends on IdP claims | **SSO** capability is required for Microsoft / OpenID Connect. Product toggles: **Configure** → **Connections** → **Authentication Methods**. Email offers **Login code** or **Magic link**. **Login code (OTP) at a glance:** **6-digit** code, no link in the email; finish on the **same browser** that started login; expires in **10 minutes**; locks after **5** wrong attempts; hashed at rest; resend invalidates earlier unused codes. Full detail: [SSO and Authentication → Login code](/docs/external-identity-providers/sso-and-authentication#email-login-code-or-magic-links). ### When First Login Creates an Account [#when-first-login-creates-an-account] | Method | Rule | | ------------------------------------ | -------------------------------------------------------------------------- | | Login code / Magic Links / Microsoft | Domain listed under **Approved for Sign Up** | | OpenID Connect | Auto-create enabled in OIDC **More options** | | API login link | Does not create—use **POST /users** (or Entra / SCIM / admin invite) first | Admin invites, Entra, SCIM, registration pages, and API user create also provision **outside** interactive sign-in. ### Email-Shaped Identifiers [#email-shaped-identifiers] | Pattern | Use when | Mail sent? | | ------------------------------------------------- | --------------------------------------------------------------- | ------------------------------- | | Real mailbox | People should get invites, reminders, Login codes / Magic Links | Yes (if email status is active) | | **`@noemail.skillhabit.com`** (unique local part) | API / SSO-only accounts with no mailbox | **Never** | | Inactive email status | Delivery failed earlier | Held until **Reactivate email** | How Skillhabit picks an address from Microsoft / OIDC / Entra: [SSO and Email Addresses](/docs/configure/sso-and-email).\ Delivery rules: [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). ### OpenID Connect Claims (Minimum) [#openid-connect-claims-minimum] At least one of **`email`**, **`preferred_username`**, or **`upn`**—or sign-in cannot complete. Prefer a real **`email`** when people should receive Skillhabit notifications. ### Shared Devices and Sessions [#shared-devices-and-sessions] Append **`?logout=true`** (or `logout=1` / `action=logout`) to clear the session before the next person. Opening a magic login link ends the previous session. Manage devices under **Profile** → **Active sessions**. Details: [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication#shared-computers-and-sign-out-links). ### Related [#related] * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) * [Create a User and Sign-In Link](/api-reference/examples/create-user-and-sign-in-link) * [API Keys](/docs/configure/api-keys) # Visibility, Mandatory & Licenses (https://docs.skillhabit.com/docs/reference/visibility-mandatory-and-licenses) ### What This Is For [#what-this-is-for] A **decision matrix** for the four controls people mix up most: **visibility**, **mandatory**, **Academy availability**, and **content licenses**. Lookup only—steps live in the linked how-tos. ### Who This Is For [#who-this-is-for] **Administrators** and support answering “they bought it / were invited but can’t open it.” ### The Four Questions [#the-four-questions] | Control | Question it answers | Where you set it | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | | **Visibility** (group / individual / Everyone) | Can this person **see** the item in **Learn** (standalone library row)? | **Create** → **Visibility and targets** | | **Mandatory** vs **optional** | Is this target **required** (invite + track) or only visible? | Same **Visibility and targets** row | | **Academy Visibility** (product availability) | How do people **browse, buy, or request** this product in **Academy**? | **Create** / **Manage Academy** → **Content** | | **Content licenses** | For **paid** licensed products: can they **start and use** it after they already have visibility? | Academy commerce + **Manage licenses** / profile **Add license** | You normally need **visibility + a valid license** for license-gated paid products. Licenses do **not** replace visibility. ### Mandatory vs Optional [#mandatory-vs-optional] | Setting | Learner effect | Analyze / Home | Email | | ------------------------ | ----------------------------------------------- | ---------------------------------------------- | ----------------------------------------------- | | **Content is mandatory** | Shows as **Mandatory**; completion tracked | **Invited** / **Not started** until they start | **New Content Notification** (batched \~15 min) | | **Content is optional** | Visible when they have visibility; not required | Enrollment shows **Optional** | No mandatory assignment mail from this flag | **Mandatory stays mandatory** after completion—it does not flip to optional. Meetups cannot currently be marked mandatory. Details: [Enrollment and Notifications](/docs/create/enrollment-and-notifications) · [Automated Course Notifications](/docs/create/automated-course-notifications). ### When Learn Shows (or Hides) Content [#when-learn-shows-or-hides-content] | Situation | Standalone row in **Your library**? | Can they still open it? | | --------------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | | Group or individual visibility (active window) | Yes | Yes (license rules still apply) | | No visibility | No | Direct link blocked (unless an exception below) | | Inside a **program** they can open | Inner items may be absent as standalone rows | Yes, **from the program** | | **Recertification** path from an issued certificate | Renewal item may lack standalone visibility | Yes, from **Certificates** / renewal flows | | Admin-issued **content license** | Yes (license also grants individual visibility) | Yes, while the license is valid | Blocked-access dialogs (**View in the Academy**, **License required**, **Not available**): [Visibility in Learn](/docs/learn/visibility). ### Academy Product Availability [#academy-product-availability] | Availability | Who can access | Typical use | | ------------------------- | ----------------------------------------------------------------------------------- | -------------------------- | | **Public** | Anyone with the **product link** (anonymous); signed-in users enroll into **Learn** | Open / promotional modules | | **Available** / **Users** | Signed-in free enrollment | Internal catalog | | **Purchase** | Paid (**Stripe** or **Manual flow**) | Commercial training | | **Approval** | Request + manager approve | Controlled free access | | **Unavailable** | Not in Academy | Learn-only / drafts | Catalog who-can-open (**Manage Academy** → **Visibility**) is separate from per-product availability: [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). ### Licenses (Paid Products) [#licenses-paid-products] | Fact | Detail | | ---------------- | ------------------------------------------------------------------------------------------------------------- | | When issued | On completed paid Academy order (when licensing is on), or **Add license** on a profile / **Manage licenses** | | What they grant | Time-bounded **use** + individual **Learn** visibility | | Program products | One **program-level** license; inner items do not each need their own for that path | | Attempt limits | Still enforced under a license | Full rules: [Content Licenses](/docs/academy/content-licenses). ### Quick “Why Can’t They Open It?” [#quick-why-cant-they-open-it] 1. Do they have the **Learn** app? → [Roles & App Access](/docs/reference/roles-and-app-access) 2. Do they have **visibility** (or a program / recert exception)? 3. If the product uses licenses, do they have a **valid license**? 4. Is the visibility **window** active ([Time-Restricted Access](/docs/create/time-restricted-access))? 5. Are **attempt limits** exhausted ([Attempt Limits](/docs/learn/attempt-limits))? ### Related [#related] * [Visibility in Learn](/docs/learn/visibility) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Content Licenses](/docs/academy/content-licenses) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # Public Content in Academy (https://docs.skillhabit.com/docs/releases/2025-08-14) Sometimes your audience is outside the workspace: partners, prospects, or public learners. We added anonymous public access via product links, while keeping the richer signed-in path for people who already have accounts. * **Anonymous public access** — Make content available without a Skillhabit account via product links, with clear limits on what analytics can show for anonymous participants—so reach does not mean pretending we know who they are. See [Public Content](/docs/academy/public-content). * **Signed-in experience stays complete** — People who already have an account get the usual signed-in path and richer stats in **Analyze**. * **Faster path from Create** — Jump from **Create** into Academy settings when you are ready to sell or publish externally—less context-switching when a course is ready to go live. Related: [Sell a Course](/docs/use-cases/sell-a-course) · [Academy](/docs/academy). # Attempt Limits on Courses (https://docs.skillhabit.com/docs/releases/2025-09-04) High-stakes and compliance courses need fair limits: enough tries to learn, not endless retries that weaken the result. We added attempt limits learners can see clearly, plus admin resets when a retake is the right call. * **Set attempt limits on built-in courses** — Choose 1–99 attempts. Learners see how many remain, get confirmation on the last try, and stop when attempts are exhausted—so the stakes stay clear. See [Course Settings and Features](/docs/create/supported-content-types/course-settings-and-features) · [Attempt Limits](/docs/learn/attempt-limits). * **Reset from Users & Groups** — Administrators can reset course attempts for an individual when coaching or support warrants another chance. * **Content association for creators** — See which content someone created or collaborates on from their profile, and review results in **Analyze**—helpful when you need to talk to the right author about a course. Related: [Users and Profiles](/docs/users-and-groups/users-and-profiles) · [Analyze](/docs/analyze). # Auto Archive (https://docs.skillhabit.com/docs/releases/2025-09-25) Inactive accounts clutter licensing, admin views, and reporting long after people have left. We added automatic archival with clear timelines and notifications, plus the manual controls you still need for exceptions. * **Automatic archival** — Set how long inactivity lasts before we archive a user, optional deletion timelines, and who gets notified—so cleanup is policy, not a weekend project. See [Auto Archive](/docs/configure/auto-archive). * **Manual control when you need it** — Archive now, schedule a date, or unarchive from **Users & Groups** when someone’s situation does not fit the default rule. * **Clearer lists** — Filter users by active, archived, and administrators, and groups by manual, smart, and directory-synced types—so you can see the right population when you act. Related: [Users and Profiles](/docs/users-and-groups/users-and-profiles) · [Groups](/docs/users-and-groups/groups). # Category Filtering in Learn (https://docs.skillhabit.com/docs/releases/2025-10-16) When a library grows, “scroll until you find it” stops working. We brought Create categories into Learn as filters so people can narrow the list to what they need—and clear filters in a click when they are done. * **Filter by category in Learn** — Categories come from what administrators assign in **Create**. Learners pick filters, see them as chips, and clear one or all without starting over. Related: [Learn](/docs/learn) · [Filtering and Search](/docs/create/filtering-and-search). # Learning Journey Maps (https://docs.skillhabit.com/docs/releases/2025-11-06) A program should feel like a journey, not a checklist. We added Learning Journey Maps so learners see where they are, what comes next, and what they have already completed—while authors keep control of the look after publish. * **Visual learning journeys** — Background image, **hotspots** for each step, optional sequential progression, and a first-time welcome tour. The map shows whether each hotspot is complete; open a hotspot for per-item progress. * **Flexible hotspot content** — Title, description, and media alone, or linked courses, SCORM, and meetups. Unordered hotspots stay open; ordered ones unlock in sequence when you want a guided path. * **Safe after publish** — You can still update the map look and hotspot media. Which items belong to the program and which are linked in each hotspot stay fixed after publish, so live journeys do not silently rearrange underneath people. Related: [Learning Journey Maps](/docs/create/supported-content-types/learning-journey-maps-program-themes) · [Programs](/docs/learn/programs) · [Programs With a Learning Journey Map in the Academy](/docs/academy/programs-with-a-learning-journey-map-in-the-academy). # Bulk Actions in Users & Groups (https://docs.skillhabit.com/docs/releases/2025-11-27) When Entra or SCIM owns the lifecycle, Skillhabit should not fight that ownership. We locked down archive and delete for externally provisioned people, and we kept the recovery paths that matter when mail bounces or state drifts. * **Externally provisioned users follow sync** — No manual archive date, archive now, or cancel scheduled archival in the UI for Entra / SCIM-style users; archival follows the directory. Delete stays with the external system too—so your identity source remains the source of truth. * **Unarchive when local state is wrong** — You can still unarchive an externally provisioned person if Skillhabit state needs a correction, without reopening every lifecycle control. * **Reactivate inactive email** — After bounces or complaints, reactivate delivery from **More actions** or the profile. For Entra / SCIM users, that action can appear even when most profile fields are read-only. Archived people do not get reactivation prompts—because they should not receive mail until they are back. Related: [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) · [User Provisioning](/docs/external-identity-providers/user-provisioning). # Publishing Patches vs New Revisions (https://docs.skillhabit.com/docs/releases/2025-12-18) Authors should be able to fix a typo without forcing every learner to restart. We separated light patches from true structural revisions so progress stays intact when the course shape has not changed—and everyone restarts only when it must. * **Patch by default for small edits** — Publish with a short description of what changed. Keep the same revision for minor in-place updates so progress can stay intact. * **New revision when structure changes** — Incrementing the revision (or when Skillhabit locks it on) covers bigger structural changes and may require learners to restart—because the path they were on is no longer the same course. * **Clear structural triggers** — Element IDs and order, chapter structure, question choice IDs, and passing criteria can force a revision bump, so you are not guessing what counts as “big.” * **Optional force reset** — Independently reset existing results when you need a clean slate—even if the revision story alone would not. Related: [Publishing Updates](/docs/create/supported-content-types/publishing-updates) · [Built-In Courses](/docs/create/supported-content-types/built-in-courses) · [Taking Courses](/docs/learn/taking-courses). # Automated Course Notifications (https://docs.skillhabit.com/docs/releases/2026-01-15) People need to know when new required training lands—but they should not get a separate email for every group change. We redesigned mandatory notifications so learners stay informed and inboxes stay calm. * **Smarter mandatory emails** — We send New Content notifications when someone gains a mandatory requirement (new group membership, a new requirement on existing access, or assignment directly to the user). * **Batched delivery** — We send about every **15 minutes**, and several assignments can share one email so the day does not feel like a firehose. * **Less duplicate mail** — Already-required courses (via another group or individual visibility) do not trigger again. When no requirement remains from any source, we reset the state so a later requirement can notify again. People with a **passing grade** are not notified for that course—they already did the work. Related: [Automated Course Notifications](/docs/create/automated-course-notifications) · [Enrollment and Notifications](/docs/create/enrollment-and-notifications). # Academy Storefront and Collections (https://docs.skillhabit.com/docs/releases/2026-02-05) Not every seat should last forever. We introduced optional content licenses so Academy can sell access that expires, consumes on completion or max attempts, and renews cleanly—without reinventing your whole storefront. * **Optional content licenses** — Layer licenses on top of visibility and attempt limits for single-use–style paid access. Set price, enable licenses, and choose validity after purchase. * **Clear consumption rules** — A license is consumed on successful completion, when maximum attempts are reached, or when the validity period expires. If it expires unused, the person needs another purchase or issuance—no mystery leftover access. * **How seats are granted** — One license per Academy purchase by default, plus manual issuance from **Users & Groups** profiles when you need to gift or correct access. * **Programs** — One program-level license covers inner content; exhausting attempts on any single item can consume the program license, which matches how people experience a bundled journey. Related: [Content Licenses](/docs/academy/content-licenses) · [Sell a Course](/docs/use-cases/sell-a-course) · [Academy](/docs/academy). # License Validity Periods (https://docs.skillhabit.com/docs/releases/2026-02-26) Training you sell for a season should expire when that season ends. We added predictable validity periods for paid licenses, and we let multiple licenses stack so renewals and repeat purchases stay honest instead of overwriting each other. * **Licenses for paid products** — Licenses apply to priced products (price greater than zero), not free catalog items or free manager-approved access. Stripe vs manual approval does not change that rule—what matters is that you are selling time-bound access. * **Flexible validity** — Choose the window that matches how you sell: 1 month, 3 months, 6 months, 1 year, 2 years, 3 years, or 5 years. * **Multiple licenses per person** — Repeat purchases and admin-issued licenses stack, each with its own consumption and expiry, so a renewal extends access without erasing history. Related: [Content Licenses](/docs/academy/content-licenses) · [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses). # Payments and Activate Commerce (https://docs.skillhabit.com/docs/releases/2026-03-19) Commerce only works if the learner’s library updates when money (or approval) clears. We tightened that hand-off so completed Academy orders issue licenses reliably, and admin-granted licenses open Learn without an extra step. * **License when the order completes** — A sale issues a license when the Academy order is finished, including after **manual approval** when that completes the order—so waiting on finance does not leave people locked out afterward. See [Supported Payment Options](/docs/academy/supported-payment-options). * **Manual licenses unlock Learn** — Adding a license for someone also grants **individual visibility**, so the product shows up in their **Learn** library right away. Related: [Content Licenses](/docs/academy/content-licenses) · [Users and Profiles](/docs/users-and-groups/users-and-profiles). # Academy Visibility and Public Products (https://docs.skillhabit.com/docs/releases/2026-04-09) When you sell or issue licenses, you need a clear answer to “who has access to this?” We added a product-level view so you can manage licenses from Academy access settings instead of piecing it together user by user. * **Manage licenses from the product** — Open the content’s **visibility and access** in the **Academy** and choose **Manage licenses** to see all issued licenses for that item. Related: [Content Licenses](/docs/academy/content-licenses) · [Workspace Academy Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). # Content Licenses and Academy Purchases (https://docs.skillhabit.com/docs/releases/2026-04-30) Buying a program should unlock the program. We fixed the case where someone had a standalone course license but still could not start that course as part of a licensed program path—so paid journeys match the product you sold. * **Program license first** — If a **program** requires a license, starting content **inside** that program needs the program license (for example an Academy purchase)—even when the learner already has a standalone license for that same course as its own product. Related: [Content Licenses](/docs/academy/content-licenses) · [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses). # Prerequisites and Program Licenses (https://docs.skillhabit.com/docs/releases/2026-05-21) Learners should not see a crowded library of things they cannot start—and they also should not lose access to content they reached through a program or a certificate. We tightened visibility in Learn while preserving those earned paths. * **Strict visibility in Learn** — People do not see content they lack visibility for, so libraries stay relevant and less overwhelming. * **Programs still open their path** — Content inside a program can be reached from the program without needing the same item as standalone **Learn** visibility—so the journey you designed still works. * **Certificates keep renewal open** — An issued certificate can unlock configured renewal content even when direct library visibility would block it (including certificates earned on inner program content). Related: [Visibility in Learn](/docs/learn/visibility) · [Prerequisites](/docs/create/prerequisites) · [Renewal](/docs/certificates/renewal). # Programs and Learn Visibility (https://docs.skillhabit.com/docs/releases/2026-06-11) Nothing frustrates a motivated learner like “Access denied” with nowhere to go. If the same course or program is available in the Academy, we now help them continue—enroll or purchase—instead of only closing the dialog. * **Go to Academy from Access denied** — When visibility (or a similar block) stops a start, but the same course or program is an Academy product, we can offer **Go to Academy** so the person can enroll or buy instead of giving up. * **Works without extra IDs in the error** — We check catalog metadata for the content (or program) id, so the helpful Academy path still appears even when the error body does not include a product id. Related: [Visibility in Learn](/docs/learn/visibility) · [Academy](/docs/academy). # Share Links for Published Content (https://docs.skillhabit.com/docs/releases/2026-07-02) When you share a course or program, people should land in the right place with the right rules. We improved share links (including QR), tightened how licenses and renewals behave, and made Analyze exports easier to tailor—so sharing feels intentional instead of fragile. * **Share link for published content** — Share courses, SCORM, meetups, and programs with **Learn** or **Academy** destinations, **Full** / **Lock** / **Block** navigation, and QR download. Links respect visibility and licenses, so you are not sending someone into a dead end. See [Share Link](/docs/create/share-link). * **Recertification access** — An issued certificate (including from content inside a program) can unlock renewal content through **Certificates**, even without standalone **Learn** visibility—so renewal does not fall apart when the original path was nested. See [Renewal](/docs/certificates/renewal). * **Public products without a public catalog** — **Public** items still work via product link for anonymous learners when the Academy itself is not open for browsing. You can invite people in without opening the whole storefront. See [Public Content](/docs/academy/public-content). * **Richer Analyze exports** — Configurable **User results** Excel exports, plus **Content statistics** and per-course **Export details** for built-in courses—so reporting matches the questions you actually ask. See [Exports](/docs/analyze/exports). * **Safer custom attribute type changes** — Changing an attribute’s type resets everyone’s values for that field, with confirmation when leaving **Single Select** or **Multi Select**, so a quiet schema change does not silently corrupt profiles. See [Custom Attribute Fields](/docs/configure/custom-attribute-fields). * **Licenses and attempts** — The first start on an active license resets attempts to the maximum for that content (once per license). Program licenses only refill inner items that had already exhausted attempts—so renewals feel fair without giving unlimited retries everywhere. Related: [Content Licenses](/docs/academy/content-licenses) · [Enrollment and Notifications](/docs/create/enrollment-and-notifications). # Manager Scope in Users & Groups and Analyze (https://docs.skillhabit.com/docs/releases/2026-07-23) Managers should coach their teams without wading through the whole organization. We narrowed Users & Groups to the groups they own, while still giving them rich Analyze insight for the people in those groups—so progress and gaps are easier to spot. * **Only managed groups in Users & Groups** — Managers review the groups they own. They do not open full user profiles from that manager view, which keeps sensitive directory work out of everyday coaching. See [Managers](/docs/users-and-groups/managers). * **Full Analyze results for managed people** — With **Analyze** access, managers see **all results** for users in their groups—not only content assigned through the group. That is the difference between “what we assigned” and “how is this person really doing?” See [Progressions](/docs/analyze/progressions). * **Archived users when you need them** — Archived people stay hidden by default in **Analyze**. Turn on **Filters → More options → Include archived users** when you need historical rows; we show an archived mark next to the avatar so the context is clear. Related: [Users & Groups](/docs/users-and-groups) · [Analyze](/docs/analyze). # Public Academy Products for Signed-In Users (https://docs.skillhabit.com/docs/releases/2026-08-13) Public catalog items should not feel like a special case once someone is signed in. We connected that path so taking a Public product lands in **Learn** the same way other free Academy offers do—and we made updates less disruptive while people stay in the product. * **Public products for signed-in users** — When a signed-in person takes a **Public** product (from the catalog, a product link, or after we redirect them away from an anonymous URL), we enroll it into **Learn** like any other free Academy item. See [Public Content](/docs/academy/public-content). * **Quieter application updates** — We check for new releases when Skillhabit loads and about every **10 minutes** while a tab is open. Updates apply when people reload or switch apps, and **Reload to update** is there when someone wants the new build right away. Related: [Workspace Academy Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). # Shared Computers and Sign-Out Links (https://docs.skillhabit.com/docs/releases/2026-09-03) If you train people on shared devices, you know the awkward moment: the last person left Skillhabit open, and the next person risks seeing the wrong account. We fixed that hand-off so shared computers stay ready for whoever sits down next. * **Sign out before the next user** — We let you put a logout hint on the URL (for example **`?logout=true`**) so shared browsers clear the previous session before the next learner starts. See [Login Methods](/docs/configure/login-methods). * **Magic Links replace the current session** — When someone opens a magic login link on the same browser, we sign them in as the new person—no separate manual sign-out first. * **Clean URLs after hand-off** — After login or logout params do their job, we remove them from the address bar so bookmarks and shared links stay tidy. Related: [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). # Sign In Where You Started (https://docs.skillhabit.com/docs/releases/2026-09-11) You know the awkward dance: you start Skillhabit on a laptop, open the login email on your phone, and suddenly you’re signed in on the wrong device. We fixed that hand-off for email login—and tightened a few related places so sign-in, sessions, and directory data feel trustworthy. * **Login codes for email sign-in** — Under **Configure** → **Connections** → **Authentication Methods**, choose **Login code** instead of (or as the alternative to) **Magic link**. We email a **6-digit** code with **no** sign-in link; you type it on the **same browser** where you started. Codes expire in **10 minutes**, lock after **5** wrong tries, are stored hashed, and a resend invalidates earlier unused codes. New workspaces default to login code; existing ones keep Magic Links until you switch. See [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication#email-login-code-or-magic-links). * **Other emails no longer sign you in** — Only the Magic Link **login** email (and External API sign-in links) authenticate. Everything else uses ordinary deep links: sign in with your workspace method, then continue to the destination. * **Sessions you can see and revoke** — On **Profile** → **Active sessions**, sign out other devices or everywhere. Admins can do the same from **Users & Groups** → **Sessions**. See [Users and Profiles](/docs/users-and-groups/users-and-profiles). * **How long new sessions last** — Under **Configure** → **User Management**, pick **1 day** through **12 months** for newly issued sessions. See [Auto Archive](/docs/configure/auto-archive#login-session-duration). * **Directory fields onto Skillhabit attributes** — Map an OpenID Connect claim, Microsoft Entra property, or SCIM attribute under **Configure** → **Connections** → **Attribute mappings** (**Match existing only** or **Create if missing** for lists). Release the field from your IdP first—[Add Attributes to IdP Tokens and Profiles](/docs/external-identity-providers/add-attributes-to-idp-tokens)—then finish in [User Provisioning](/docs/external-identity-providers/user-provisioning#map-directory-attributes-onto-skillhabit-attributes). * **Mail from your domain, your local-part** — With a custom email domain active, set **Sender address** (default **`no-reply`**) so From looks like `{local-part}@{your-domain}`. See [Custom Domains](/docs/configure/custom-domain#sender-address). * **Who hears about paid Academy orders** — Under **Manage Academy** → **Payment** → **Order Notifications**, choose administrators for new **paid** orders (free orders stay quiet). See [Academy Notifications](/docs/academy/notifications). * **External API assignments that match Create** — Optional or mandatory targets for users or groups, optional start/finish times, plus list and delete. See [Assign Content to a Group](/api-reference/examples/assign-content-to-a-group). Related: [Sign-In & Email Identifiers](/docs/reference/sign-in-and-email-identifiers) · [Custom Attribute Fields](/docs/configure/custom-attribute-fields) · [Supported Payment Options](/docs/academy/supported-payment-options). # Release Notes (https://docs.skillhabit.com/docs/releases) # Assign Mandatory Content (https://docs.skillhabit.com/docs/use-cases/assign-mandatory-content) ### Situation [#situation] A group (or set of users) must complete specific content, and you want it to show as **Mandatory** in **Learn** and **Home**—not only as optional visibility. ### Outcome [#outcome] Targeted users see the content under **Mandatory**, get invitation email when the requirement is new, and progress appears correctly in **Analyze** (**Invited** / **Not started** until they start). ### Who [#who] **Administrators** and course **collaborators** with access in **Create**. ### Path [#path] 1. Open the content in [Create](/docs/create) (usually **published** before you rely on learner access). 2. Under **Visibility and targets**, add groups or users and choose **Content is mandatory** — [Enrollment and Notifications](/docs/create/enrollment-and-notifications). Optional start/end dates: [Time-Restricted Access](/docs/create/time-restricted-access). 3. Confirm learners see it on [Home](/docs/welcome) (**Mandatory** row) and in [Learn](/docs/learn) (filter **Requirement** → **Mandatory**). 4. Optionally enable workspace [Mandatory Content Reminders](/docs/create/mandatory-content-reminders) for incomplete items. 5. Check status in [Progressions](/docs/analyze/progressions) (**User results**). ### Tips [#tips] * **Mandatory** and **optional** are both real settings. **Mandatory** invites and tracks completion; optional only grants visibility. One did not replace the other. * **Mandatory** stays **Mandatory** after completion—it does not flip to optional for that user. * Meetups cannot currently be marked **Mandatory**. * New requirements send batched email (usually within about 15 minutes)—see [Automated Course Notifications](/docs/create/automated-course-notifications). Duplicate sources for the same course do not send another invitation. * Visibility is separate from **Academy** sales and **content licenses**. If learners also need a paid license, see [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) and [Visibility in Learn](/docs/learn/visibility). ### Related [#related] * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) * [Take a Course as a Learner](/docs/use-cases/take-a-course) # Overview (https://docs.skillhabit.com/docs/use-cases) ### What This Hub Is For [#what-this-hub-is-for] **Use cases** are short recipes for common jobs in Skillhabit. Each page starts from what you need to achieve, then points you to the right atomic how-tos—without pasting full procedures. Use this hub when you know the **outcome** (“run a compliance track”, “renew certificates”, “onboard Sales”) but not which app owns each step. For app-by-app detail, open the **Apps** section in the sidebar. For a first-week path, start with the [Startup Guide](/docs/getting-started). ### Who This Is For [#who-this-is-for] Anyone planning work in Skillhabit—especially **administrators** setting up mandatory learning and certification tracks, plus **managers**, **collaborators**, and **learners** following a job that spans more than one app. ### How to Use a Recipe [#how-to-use-a-recipe] 1. Open the use case that matches your job. 2. Read **Situation**, **Outcome**, and **Who** so you know success and who acts. 3. Follow **Path** in order—each step links to a how-to with real UI labels. 4. Skim **Tips** for pitfalls that only show up when apps combine. 5. Use **Related** when your job is next to another recipe. Recipes stay thin on purpose. If a step needs depth, open the linked page—that is the source of truth. ### Pick by Job [#pick-by-job] | If you need to… | Open | | ---------------------------------------------------------- | ------------------------------------------------------------------------------ | | Make a course required in **Learn** | [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) | | Recertify before or after expiry | [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) | | See who finished, failed, or expired | [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) | | Roll out training for a department with a manager | [Onboard a Department](/docs/use-cases/onboard-a-department) | | Add people and decide which apps they see | [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) | | Keep users in sync from an identity provider | [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) | | Automate users, groups, or sign-in from your own backend | [External API examples](/api-reference/examples) | | Finish a course and find a certificate | [Take a Course as a Learner](/docs/use-cases/take-a-course) | | Run a live session and lock attendance | [Run a Meetup and Confirm Attendance](/docs/use-cases/run-a-meetup) | | List and sell a published course in **Academy** (optional) | [Sell a Course](/docs/use-cases/sell-a-course) | | Sell paid access with a fixed license window (optional) | [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) | ### People and Access [#people-and-access] ### Assign and Learn [#assign-and-learn] ### Certificates and Progress [#certificates-and-progress] ### Academy and Selling [#academy-and-selling] # Invite Users and Set App Access (https://docs.skillhabit.com/docs/use-cases/invite-users-and-set-access) ### Situation [#situation] You need to bring people into Skillhabit and decide which apps they can open—for example **Learn**, **Create**, or **Analyze**—without giving everyone full admin rights. ### Outcome [#outcome] Users can sign in, land on **Home**, and open only the apps you’ve allowed. Profiles show the right roles (**Admin**, **Manager**, or standard app access). ### Who [#who] Workspace **administrators**. ### Path [#path] 1. Add people in [Users and Profiles](/docs/users-and-groups/users-and-profiles)—individually, by email list, or **Import CSV**. Optionally send the welcome email with a login link. 2. On each profile, set **App access** (and **Manager** / **Admin** when needed). While **Admin** is on, per-app toggles are hidden because admins see everything. 3. Point them at [Home](/docs/welcome) so they can find the app launcher and their learning overview (**Continue**, **Mandatory**, **Start**). 4. For a guided first workspace setup, follow the [Startup Guide](/docs/getting-started). ### Tips [#tips] * Prefer [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) (or Entra sync) when your directory should own joiners and leavers—manual invites are for small sets and exceptions. * First-login auto-create is different from inviting: domains under **Approved for Sign Up** can create accounts when someone completes Magic Links or Microsoft sign-in—see [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation) and [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). * Learners need **Home** and **Learn** at minimum. Add **Certificates**, **Academy**, or **Analyze** only when those jobs apply. ### Related [#related] * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) * [Users & Groups](/docs/users-and-groups) # Onboard a Department (https://docs.skillhabit.com/docs/use-cases/onboard-a-department) ### Situation [#situation] A new team (for example Sales) needs shared required training, a manager who can follow progress, and a clear way to see who’s done—without hand-editing a member list every week. ### Outcome [#outcome] Users matching a department **attribute** land in a **smart group**, see **Mandatory** content in **Learn** / **Home**, and managers can review results in **Analyze**. ### Who [#who] **Administrators** (setup). **Managers** (ongoing tracking in **Analyze**, when they have that app). ### Path [#path] 1. Define the department attribute (and choices) under [Custom Attribute Fields](/docs/configure/custom-attribute-fields), and set values on users. 2. Create a **Smart Group** on that attribute — [Smart Groups](/docs/users-and-groups/smart-groups). 3. Make the onboarding course visible to that group and mark it **Mandatory** — [Enrollment and Notifications](/docs/create/enrollment-and-notifications). 4. Assign a **Manager** on the group — [Managers](/docs/users-and-groups/managers). 5. Follow completion on **User results** — [Progressions](/docs/analyze/progressions). ### Tips [#tips] * **Mandatory** stays **Mandatory** after someone finishes—it does not flip to optional for that person. * Meetups cannot currently be marked **Mandatory**; use courses, SCORM, or programs for required onboarding. * New mandatory assignments trigger batched invitation email—see [Automated Course Notifications](/docs/create/automated-course-notifications). For recurring nudges, enable [Mandatory Content Reminders](/docs/create/mandatory-content-reminders). * If membership should come from Entra or SCIM instead of attributes, use synced **External Groups** and still assign **Mandatory** visibility to that group. ### Related [#related] * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) # Renew an Expiring Certificate (https://docs.skillhabit.com/docs/use-cases/renew-a-certificate) ### Situation [#situation] A certificate is nearing expiry (or has expired) and the learner needs to recertify using the path authors configured. ### Outcome [#outcome] The learner starts renewal from **Certificates** with **Recertify** (or an administrator renews on the profile), completes the configured content in **Learn**, and sees updated dates in **Certificates**. ### Who [#who] **Learners** renew. **Administrators** configure expiration and renewal paths in **Create**, and may renew certificates under **Users & Groups**. ### Path [#path] 1. Configure expiration and renewal on the content — [Certificate Expiration and Renewal](/docs/create/certificate-expiration-and-renewal) and, when needed, [Advanced Renewal Paths](/docs/create/advanced-renewal-paths). 2. Learners get reminders ([Notifications](/docs/certificates/notifications)) and renew from [Renewal](/docs/certificates/renewal) (**Recertify** on the certificate row). 3. Confirm the new certificate under [View and Download](/docs/certificates/view-and-download). 4. If renewal content isn’t otherwise in **Learn**, see [Visibility in Learn](/docs/learn/visibility)—an **issued certificate** can unlock recertification content without standalone library visibility. ### Tips [#tips] * **Recertify** appears when renewal content is configured **and** the certificate is expired or expires within about the next **90 days**. Otherwise you usually see **Download**. * Renewal is not automatic when the date passes—someone must finish the path (or an admin renews on the profile). * For certificates earned only inside a **program**, renewal still starts from **Certificates**; you do not need that inner item as its own **Learn** row. * Admins can also renew or issue certificates on a user profile—[Users and Profiles](/docs/users-and-groups/users-and-profiles). ### Related [#related] * [Take a Course as a Learner](/docs/use-cases/take-a-course) * [Certificates](/docs/certificates) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) # Run a Meetup and Confirm Attendance (https://docs.skillhabit.com/docs/use-cases/run-a-meetup) ### Situation [#situation] You’re running a live session and need people to sign up for an occasion, then lock who attended so results (and certificates) can complete. ### Outcome [#outcome] The meetup is published with occasions; learners sign up in **Learn**; after the occasion ends, an **administrator** updates the **Attendance list** and clicks **Submit attendance list** in **Follow Up**. People marked as attended can finish in **Learn**, and certificates can issue when configured. ### Who [#who] **Collaborators** and **administrators** create the meetup in **Create**. Only **administrators** submit attendance in **Follow Up**. Learners sign up in **Learn**. ### Path [#path] 1. Create and configure the meetup (occasions, capacity, visibility) in [Meetups](/docs/create/supported-content-types/meetups). 2. Set certificate issuance if needed — [Certificate Configuration](/docs/create/certificate-configuration). 3. Learners choose an occasion in [Meetups in Learn](/docs/learn/meetups). 4. After the occasion has **ended**, open [Meetup Attendance](/docs/follow-up/meetup-attendance): mark who attended on the **Attendance list**, then **Submit attendance list** (and confirm you cannot change it afterward). 5. Learners with a passing result find certificates in [View and Download](/docs/certificates/view-and-download). ### Tips [#tips] * Meetups cannot currently be marked **Mandatory** the way courses can—you still assign visibility. * You can start marking checkboxes after the occasion **starts**, but **Submit attendance list** stays disabled until it has **ended**. * After submit, the button shows **Attendance list submitted**—there is no edit path. If nobody was on the list, you may see **Submit 'Nobody attended'** instead. * Collaborators and managers do not finalize meetup attendance in **Follow Up**—that step is administrator-only. ### Related [#related] * [Follow Up](/docs/follow-up) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Take a Course as a Learner](/docs/use-cases/take-a-course) # Sell a Course (https://docs.skillhabit.com/docs/use-cases/sell-a-course) ### Situation [#situation] You want people outside your usual assignees to discover, request, or buy a course through **Academy**—the storefront—then take it in **Learn**. ### Outcome [#outcome] A **published** course is an Academy product. Learners enroll via **product link** and/or the Academy catalog; paid orders complete in **Academy** and the course shows up in **Learn** (subject to visibility and any licenses). ### Who [#who] **Administrators** (catalog and payments via **Manage Academy**) and content creators (publish and enable **Academy Visibility** in **Create**). ### Path [#path] 1. Build and **publish** the course in [Create](/docs/create). 2. Connect payments (for paid sales) under [Supported Payment Options](/docs/academy/supported-payment-options)—**Activate Commerce**, then **Stripe integration** or **Manual flow**. 3. Enable **Academy Visibility** on the course (in **Create**, or under **Manage Academy** → **Content**). Choose availability: **Purchase**, **Public**, **Available** / **Users**, or **Approval**. Details: [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). 4. Decide who can open the **Academy catalog** under **Manage Academy** → **Visibility** (same guide as above)—independent of how each product is offered. 5. Share the **product link** via [Share Link](/docs/create/share-link) (Academy destination) or copy it from product settings. Keep the workspace Academy admin-only if you only want link-based access—see [Public Content](/docs/academy/public-content). 6. Optionally organize the catalog with [Collections](/docs/academy/collections). ### Tips [#tips] * **Public** product links can let anonymous learners start without an account; signed-in flows still use **Learn** as usual. * **Approval** is manager-approved free access—not a payment method. Configure it on the product, not under **Payment**. * Catalog visibility (**Manage Academy** → **Visibility**) and per-product availability are separate dials—mixing them up is the usual setup mistake. * For time-bounded paid access after purchase, use [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses). * When learners hit access dialogs in **Learn**, the button is **Buy License**—it opens the Academy product even when the issue is visibility. See [Visibility in Learn](/docs/learn/visibility). ### Related [#related] * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) * [Academy](/docs/academy) * [Take a Course as a Learner](/docs/use-cases/take-a-course) # Sell With Content Licenses (https://docs.skillhabit.com/docs/use-cases/sell-with-content-licenses) ### Situation [#situation] You’re selling content and want each completed paid order to issue a **content license** with a fixed validity (one month to five years)—not only catalog visibility. ### Outcome [#outcome] When an order completes in **Academy**, the buyer gets a license. Starting and finishing (or hitting attempt limits / expiry) follows the rules in [Content Licenses](/docs/academy/content-licenses). Learners normally need **both** Learn visibility and a valid license. ### Who [#who] **Administrators** configuring paid Academy products. Learners purchase or receive licenses; they take content in **Learn**. ### Path [#path] 1. Follow [Sell a Course](/docs/use-cases/sell-a-course) with a **paid** product (**Purchase** availability; **Stripe integration** or **Manual flow**). 2. Enable **Use licensing for this content** and pick **License validity** — [Content Licenses](/docs/academy/content-licenses). 3. Confirm how licenses interact with attempts and visibility on that page, in [Enrollment and Notifications](/docs/create/enrollment-and-notifications), and on the learner side in [Visibility in Learn](/docs/learn/visibility) / [Attempt Limits](/docs/learn/attempt-limits). 4. Manage holders under **Manage Academy** → product **Visibility and access** → **Manage licenses**, or **Add license** on a user profile in [Users and Profiles](/docs/users-and-groups/users-and-profiles). ### Tips [#tips] * Licenses sit **on top of** visibility—they do **not** replace **Visibility and targets**. Manual issuance also grants **individual visibility**. * In **Learn**, blocked access often shows **Buy License**. That button opens the Academy product; read whether the dialog says a visibility problem or **License required**. * A license is **issued when the order completes** (or when an admin issues one) and **consumed** on successful completion, attempt exhaustion, or validity end. * For **programs**, learners need a **program** license to start inner content—a standalone license for an inner course is not enough. ### Related [#related] * [Sell a Course](/docs/use-cases/sell-a-course) * [Take a Course as a Learner](/docs/use-cases/take-a-course) * [Academy](/docs/academy) * [Content Licenses](/docs/academy/content-licenses) # Sync Users With SCIM (https://docs.skillhabit.com/docs/use-cases/sync-users-with-scim) ### Situation [#situation] You already manage people in an identity provider that supports **SCIM**, and you do not want to create every Skillhabit user by hand. ### Outcome [#outcome] Your IdP provisions and updates Skillhabit users (and often groups) automatically. Those users show as externally provisioned in **Users & Groups**. You still set **App access** and managers in Skillhabit as needed. ### Who [#who] **Administrators**, after Skillhabit has enabled SCIM for the workspace. Coordinate with your identity / Entra admin. ### Path [#path] 1. Read [User Provisioning](/docs/external-identity-providers/user-provisioning)—start with **What This Is For**, then **Set Up SCIM**. That page also covers **Microsoft Entra ID sync** when Graph group sync is enough. 2. Ask Skillhabit to enable SCIM; create an [API key](/docs/configure/api-keys). 3. Configure the SCIM connector in your IdP with the details Skillhabit gives you. 4. Confirm users appear in [Users & Groups](/docs/users-and-groups) and set **App access** / managers as needed—[Users and Profiles](/docs/users-and-groups/users-and-profiles). 5. If people also sign in with Microsoft or OpenID Connect, enable those under [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication). SCIM still owns ongoing creates and updates; first-login auto-create is optional and separate. ### Tips [#tips] * Prefer **Microsoft Entra ID sync** in **Configure** → **Connections** when Graph group sync meets your needs—same provisioning guide covers that path. * Do not maintain conflicting creates in both SCIM and Graph without agreeing which system owns lifecycle. * **Approved for Sign Up** (first login for Magic Links / Microsoft) is **not** a substitute for SCIM. It creates accounts on sign-in for listed domains; it does not sync groups or archive leavers—see [Allowed Domains for Account Creation](/docs/configure/allowed-domains-for-account-creation). * Externally provisioned profiles have limits on what admins can edit—see [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). ### Related [#related] * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [Onboard a Department](/docs/use-cases/onboard-a-department) # Take a Course as a Learner (https://docs.skillhabit.com/docs/use-cases/take-a-course) ### Situation [#situation] You’ve been assigned a course (or enrolled via **Academy**) and need to finish it in **Learn**. ### Outcome [#outcome] You complete the course in **Learn**, see your result, and—if issuance is enabled—find the certificate in **Certificates** under **Active certificates** (or renew later if it expires). ### Who [#who] **Learners**. ### Path [#path] 1. Open [Learn](/docs/learn) (or continue from [Home](/docs/welcome)—**Continue**, **Mandatory**, or **Start**). 2. If the course is missing or blocked, check [Visibility in Learn](/docs/learn/visibility). When access is denied, **Buy License** opens the Academy product page (visibility problem or license problem—read the dialog title). 3. Start or resume the course—[Taking Courses](/docs/learn/taking-courses). If you need another attempt, see [Attempt Limits](/docs/learn/attempt-limits). 4. After you finish (and any approval rules complete), check results in **Learn**. 5. Open [View and Download](/docs/certificates/view-and-download) for certificates you’ve earned. ### Tips [#tips] * Filter **Your library** by **Requirement** → **Mandatory** when you only want required items. * **Buy License** can mean “open this Academy product”—even when the real issue is missing visibility, not a paid license. See [Visibility in Learn](/docs/learn/visibility). * For programs and live sessions, use [Programs](/docs/learn/programs) and [Meetups](/docs/learn/meetups) instead of the course path above. * Recertification starts from **Certificates** with **Recertify**—[Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate). ### Related [#related] * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) * [Sell a Course](/docs/use-cases/sell-a-course) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) # Track Team Progress in Analyze (https://docs.skillhabit.com/docs/use-cases/track-team-progress) ### Situation [#situation] You need to see who’s not started, in progress, approved, failed, or expired—for a group you manage or for content you own. ### Outcome [#outcome] You can filter **User results**, open **Content statistics**, export a spreadsheet when you need one, and (with filters cleared) subscribe to the monthly report. ### Who [#who] **Administrators**. **Managers** and **collaborators** with **Analyze** access (managers: users in managed groups; collaborators: content they’re tied to). ### Path [#path] 1. Open [Analyze](/docs/analyze). 2. Use [Progressions](/docs/analyze/progressions) (**User results**) for people in scope. Managers: users in managed groups—see [Managers](/docs/users-and-groups/managers). 3. Use [Content Statistics](/docs/analyze/content-statistics) for question-level and engagement detail on content items. 4. [Export](/docs/analyze/exports) when you need a spreadsheet. ### Tips [#tips] * Archived users are hidden by default; turn on **Include archived users?** under **More options** in **Add filters** if you need them. * Creators and collaborators only see content they’re tied to, and only if they have **Analyze** access. * **Subscribe** for the monthly report only appears when filters are cleared on **User results**. * For incomplete **Mandatory** assignments, combine filters on status with content or group scope—then email from the filtered list when Progressions offers it. ### Related [#related] * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Assign Mandatory Content](/docs/use-cases/assign-mandatory-content) * [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate) # Home (https://docs.skillhabit.com/docs/welcome) ### What This Is For [#what-this-is-for] **Home** is the first screen after sign-in. It is your **app launcher** and a personal **learning overview**—not a separate “dashboard” product. From **Home** you: * Open the apps you have access to (**Learn**, **Create**, **Analyze**, and the rest) * See learning you should resume, start, or keep on the calendar * Jump toward **Academy** or recent certificates when those apps are available to you It answers “where do I go next?” for everyone in the workspace. Deeper work still happens in the other apps (**Learn** for the full library, **Create** for authoring, **Configure** for workspace settings, and so on). You only see apps and sections your access allows. Two people in the same workspace can have different **Home** layouts. Empty rows stay hidden. ### Who This Is For [#who-this-is-for] | Role | What Home Is For | | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | | **Learners** | Resume content, spot mandatory work, see upcoming meetup occasions, open **Academy** or **Certificates** when you have those apps | | **Managers and collaborators** | Same personal learning view—plus any admin apps your profile can open under **Your apps** | | **Administrators** | Launch **Configure**, **Users & Groups**, **Create**, and other admin apps—and brand the welcome header everyone sees | ### Home vs Other Apps [#home-vs-other-apps] | Need | Go Here | | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | Launch an app or scan your learning at a glance | **Home** (this app) | | Browse the full enrolled library, filters, and search | [Learn](/docs/learn) | | Author or publish courses, programs, and meetups | [Create](/docs/create) | | Change the welcome image and text at the top of **Home** | [Welcome Banner](/docs/configure/welcome-banner) in **Configure** | | Grant which apps someone can open | [Users & Groups](/docs/users-and-groups) / [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) | *** ### Welcome Banner [#welcome-banner] The top of **Home** shows a header image plus a heading and short message. * If your workspace has not customized them, you see the defaults: **Welcome** and **What would you like to learn today?** * Administrators set the custom image, **Welcome header**, and **Welcome message** in **Configure** → **Customization** → **Welcome message**. How to edit that branding: [Welcome Banner](/docs/configure/welcome-banner). *** ### Your Apps [#your-apps] Near the top, **Your apps** lists every app your account can open (learner apps and admin apps together). **Home** itself is not listed as a card—you are already there. Typical cards include **Learn**, **Create**, **Academy**, **Certificates**, **Analyze**, **Follow Up**, **Users & Groups**, and **Configure**, depending on roles and licenses. * Click a card to open that app. * Hover (or long-press on some devices) for a short tip about what the app is for. * Missing an app you expect? An administrator grants app access in **Users & Groups**—see [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access). *** ### Learning Rows (Continue, Mandatory, Start) [#learning-rows-continue-mandatory-start] These horizontal rows appear only if you have access to **Learn**. They are a snapshot of content in your library—not the full library. For search, filters, and everything enrolled, open [Learn](/docs/learn). Each row shows up to a few cards. If you have more, a **View all** card sends you into **Learn**. | Section | What You See | | ------------- | ----------------------------------------------------------- | | **Continue** | Content you have started but not finished | | **Mandatory** | Mandatory content you have not started yet | | **Start** | Optional content available to you that you have not started | Completed items leave these rows. Status overlays on cards (progress, locked, failed, and similar) reflect the same learning state you would see in **Learn**. Click a card to open the content overview, then continue into the course, SCORM package, program, or meetup. *** ### Your Upcoming Events [#your-upcoming-events] **Your upcoming events** lists meetup occasions you are enrolled in, with date and time. The section appears only when you have at least one upcoming occasion. Open an event to go to that meetup in **Learn**. Attendance confirmation and follow-up live elsewhere—see [Meetups](/docs/learn/meetups) and [Meetup Attendance](/docs/follow-up/meetup-attendance). *** ### Looking for More Courses? (Academy) [#looking-for-more-courses-academy] If you have access to **Academy**, **Home** shows **Looking for more courses?** with a card for your workspace Academy (name and background when configured). Open it to browse and enroll (or purchase) in **Academy**—see [Academy](/docs/academy). Workspace vs product visibility: [Academy Catalog Visibility vs Product Availability](/docs/academy/workspace-academy-visibility-vs-product-availability). *** ### Your Latest Certificates [#your-latest-certificates] If you have access to **Certificates**, **Home** shows **Your latest certificates**—a short list of recently earned certificates (grouped by month), with a path to renew when recertification is available. * Empty state: **No certificates yet** / **Complete a course to get your first certificate.** * **View all your certificates** opens the full **Certificates** app. Details: [Certificates](/docs/certificates). Renewal: [Renew an Expiring Certificate](/docs/use-cases/renew-a-certificate). *** ### What Changes What You See [#what-changes-what-you-see] | Factor | Effect on Home | | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | **App access** | Controls **Your apps** and whether learning rows, **Academy**, or certificates sections can appear | | **Enrollments and progress** | Fill **Continue**, **Mandatory**, and **Start**; hide empty rows | | **Meetup enrollments** | Fill **Your upcoming events** when occasions are upcoming | | **Welcome message in Configure** | Changes the header image, **Welcome header**, and **Welcome message** for everyone—[Welcome Banner](/docs/configure/welcome-banner) | ### Related [#related] * [Startup Guide](/docs/getting-started) * [Take a Course as a Learner](/docs/use-cases/take-a-course) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [Learn](/docs/learn) * [Configure](/docs/configure) * [Welcome Banner](/docs/configure/welcome-banner) # Bulk Actions and Email (https://docs.skillhabit.com/docs/users-and-groups/bulk-actions-and-email) ### What This Is For [#what-this-is-for] Three related topics live here so delivery and lifecycle rules stay in one place: 1. **Bulk Actions** — run the same delete across many emails from a CSV 2. **Externally provisioned users** — what admins can (and cannot) change when an IdP or API owns the account 3. **Email delivery** — placeholder addresses, inactive mail, and Magic Links Identity **setup** (Entra, SCIM, SSO, API) stays under [External Identity Providers](/docs/external-identity-providers). This page is what you see afterward in **Users & Groups**. ### Who This Is For [#who-this-is-for] Workspace **administrators**. *** ### Bulk Actions (CSV) [#bulk-actions-csv] Open **Users & Groups** → **More actions** → **Bulk Actions**. 1. **Import CSV File** with an `email` column (you can import multiple files; duplicate addresses are ignored). 2. Choose an action from **Select Action**. Supported action today: * **Delete Users** — Confirms before processing. Each email is resolved to an account; unknown addresses show in the summary. Deletions run one user at a time with progress in the dialog. When an action finishes, the dialog shows **completed** and **failed** counts and per-email status (success, not found, or error). The user list refreshes after a successful bulk delete. **Bulk Actions** uses email addresses from CSV import only. Selecting users with checkboxes on the **Users** list is a separate path (**Delete Selected** on the selection footer)—not the CSV dialog. To issue **content licenses** for many people, use **Add license** on each profile or **Manage licenses** in **Academy**—see [Content Licenses](/docs/academy/content-licenses) and [Users and Profiles](/docs/users-and-groups/users-and-profiles). *** ### Externally Provisioned Users [#externally-provisioned-users] Some users are provisioned through an external system (for example OpenID Connect, Microsoft Entra ID / Microsoft Graph, or SCIM). In **Users & Groups**, they appear as **external** (“This user was provisioned externally”). Archival is driven by the integration: when someone is removed or deactivated in the source directory, Skillhabit archives them with sync. **Archive now**, **Set archive date**, and other **manual archive** actions are not offered—a manual archive would not stick; the next successful sync would typically unarchive them if they still exist externally. What you can still do: * **Unarchive** — If an externally provisioned user looks archived in Skillhabit, you can still unarchive from **More actions** (for example on the user list) to correct local state. Routine lifecycle stays with the integration. * **Delete User** — Not available from the menu; removal goes through the external directory and provisioning. * **Reactivate email** — If the platform cannot deliver to the address (inactive after bounces or spam complaints), reactivate email from **More actions** or the profile. That does not change how the user is provisioned. * For **Microsoft Entra ID / Graph** and **SCIM** users, most profile fields are read-only (“handled by an external service”). The **More actions** menu on the list and profile header appears when **Reactivate email** is needed (inactive email, user not archived). Other actions stay hidden as above. * When a user is **already archived**, inactive-email warnings and reactivation are not shown—archive and email status follow the integration and account state. How accounts get into Skillhabit from outside: [User Provisioning](/docs/external-identity-providers/user-provisioning). *** ### Email Delivery Rules [#email-delivery-rules] Skillhabit sends system email (invitations, reminders, course updates, and similar) when delivery is allowed. * **Placeholder domain (no email sent)** — If someone has no real mailbox—for example accounts created so your systems can sign them in with the [External API](/api-reference)—use **`@noemail.skillhabit.com`**. Skillhabit **never sends** email to that domain. Use a unique local part per user (for example `learner-48291@noemail.skillhabit.com`). Useful when you authenticate another way (API login links, SSO, and so on). Microsoft Entra sync also assigns this domain when the directory profile has no valid email—see [SSO and Email Addresses](/docs/configure/sso-and-email). * **Inactive email** — If delivery fails (bounces, complaints, or an unreachable domain), the address can become **inactive** and further mail is held until an administrator uses **Reactivate email** (see above). * **Magic Links** — Users with a `@noemail.skillhabit.com` address cannot receive magic-link or other email-based login messages—plan another sign-in method for those accounts ([SSO and Authentication](/docs/external-identity-providers/sso-and-authentication)). **Administrator accounts:** Workspace administrators have a reduced **More actions** menu for other users (no archive or delete on normal accounts). If such a user has **inactive email**, **Reactivate email** may still appear so you can fix delivery. ### Related [#related] * [Allowlist Skillhabit Email](/docs/allowlist-skillhabit-email) — corporate spam filters and safe senders * [Users and Profiles](/docs/users-and-groups/users-and-profiles) * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) * [SSO and Email Addresses](/docs/configure/sso-and-email) * [External API](/api-reference) * [Content Licenses](/docs/academy/content-licenses) # Groups (https://docs.skillhabit.com/docs/users-and-groups/groups) ### What This Is For [#what-this-is-for] A **group** is a named set of users you use for visibility, assignments, managers, Academy approvals, and reporting. Skillhabit has three kinds. Pick the kind that matches who should **own membership**. | Kind | Who owns membership? | Typical use | | ------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | **Manual Group** | You (or a manager with **Manage group members**) | Teams, cohorts, one-off lists you edit by hand | | **Smart Group** | Rules on [custom attributes](/docs/configure/custom-attribute-fields) | Departments, regions, roles that should stay in sync with profile data | | **External Groups** | Your identity provider (for example Entra sync or SCIM) | Directory groups you chose to sync—see [User Provisioning](/docs/external-identity-providers/user-provisioning) | Smart groups are covered in depth on [Smart Groups](/docs/users-and-groups/smart-groups). This page is the overview and the manual / external paths. ### Who This Is For [#who-this-is-for] **Administrators** create and configure all group types. **Managers** open only the groups they oversee—see [Managers](/docs/users-and-groups/managers). ### Browse Groups [#browse-groups] On the **Groups** tab, filter with cards: * **Manual Groups** * **Smart Groups** * **External Groups** (shown when integration-synced groups exist) Search by name. Open a group to edit it. ### Create a Group [#create-a-group] 1. Open **Users & Groups** → **Add** → **Create Groups**. 2. Enter a **Group Name**. 3. Choose **Manual Group** (“Add members yourself”) or **Smart Group** (“automatically add and remove members based on attributes”). 4. For a smart group, add at least one condition before you can create—then continue on [Smart Groups](/docs/users-and-groups/smart-groups). 5. Confirm. Skillhabit opens the group editor so you can finish managers (and members for manual groups). **External Groups** are not created in this dialog—they appear when provisioning syncs them. ### Manual Groups [#manual-groups] In the group editor (**Basic information**, and **Content** when Academy approvals are enabled): * Rename the group * Assign **Managers** and their permissions ([Managers](/docs/users-and-groups/managers)) * Add or remove **members** * Handle member content requests from **Academy** (when that capability is on) Managers with **Manage group members** can edit the member list from their manager view. ### External Groups [#external-groups] Synced from Microsoft Entra ID, SCIM, or similar: * Membership and usually the **group name** follow the external system (the name field shows as externally controlled) * You can still assign **managers** in Skillhabit for Analyze scope and Academy approvals * Filter the list with **External Groups** to find them quickly Change directory membership in the IdP, not by hand in Skillhabit. Setup: [User Provisioning](/docs/external-identity-providers/user-provisioning). ### Related [#related] * [Smart Groups](/docs/users-and-groups/smart-groups) * [Managers](/docs/users-and-groups/managers) * [Users and Profiles](/docs/users-and-groups/users-and-profiles) * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Onboard a Department](/docs/use-cases/onboard-a-department) # Users & Groups (https://docs.skillhabit.com/docs/users-and-groups) ### What Users & Groups Is For [#what-users--groups-is-for] **Users & Groups** is where you manage **who is in the workspace**, how they are **organized**, and what they can **open**. Mixing up a few related ideas is the most common confusion: | | **Users** | **Groups** | **Managers** | **External identity** | | ------------------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------- | | **Question it answers** | Who has an account? | How are people organized? | Who oversees which groups? | Who creates/updates accounts from outside Skillhabit? | | **What you do here** | Create profiles, set **App access**, archive or delete | Build **Manual**, **Smart**, or review **External** groups | Assign managers and their permissions | Mostly **view** people marked as externally provisioned | | **What lives elsewhere** | Sign-in methods → [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication) | Directory sync of groups → [User Provisioning](/docs/external-identity-providers/user-provisioning) | Learning results → [Analyze](/docs/analyze) | Entra / SCIM / API setup → [External Identity Providers](/docs/external-identity-providers) | You often need **both** in-app management and external identity: provision people from a directory or API, then finish app access, managers, and smart groups here. ### Who Uses It [#who-uses-it] * **Administrators** — full workspace: all users, all groups, roles, bulk actions, licenses on profiles * **Managers** — only the groups they oversee (member lists, optional Academy approvals); they do not open full user profiles from this view ### Pick a Guide [#pick-a-guide] * **[Users and Profiles](/docs/users-and-groups/users-and-profiles)** — add people, roles, **App access**, archive, licenses, certificates, attempts * **[Groups](/docs/users-and-groups/groups)** — manual vs smart vs external groups * **[Smart Groups](/docs/users-and-groups/smart-groups)** — attribute rules that keep membership automatic * **[Managers](/docs/users-and-groups/managers)** — manager view, permissions, and Analyze scope * **[Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email)** — CSV bulk delete, externally provisioned users, when Skillhabit sends email ### Where to Click First [#where-to-click-first] 1. Open **Users & Groups** from the app launcher. 2. Use the **Users** / **Groups** tabs at the top. 3. **Add** → **Add Users** or **Create Groups**, or **More actions** for **Bulk Actions** and **Send Content Invitations**. ### Related Use Cases [#related-use-cases] * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [Onboard a Department](/docs/use-cases/onboard-a-department) * [Sync Users With SCIM](/docs/use-cases/sync-users-with-scim) * [Sell With Content Licenses](/docs/use-cases/sell-with-content-licenses) # Managers (https://docs.skillhabit.com/docs/users-and-groups/managers) ### What This Is For [#what-this-is-for] A **manager** is a user who oversees one or more groups. In **Users & Groups** they get a **focused view**: only those groups—not the full workspace user directory. Managers are for team leads who should see their people, optionally edit manual membership, approve Academy requests, and follow progress in **Analyze**—without making everyone an administrator. ### Who This Is For [#who-this-is-for] * **Administrators** — turn on **Manager**, assign people to groups, set permissions * **Managers** — day-to-day work inside their groups ### Turn Someone Into a Manager [#turn-someone-into-a-manager] 1. Open their profile in **Users & Groups**. 2. Under **App access**, turn on **Manager** (“Managers have access to all users within their groups”). 3. Open each group they should oversee → add them under **Managers**. 4. Set **Enabled permissions** for that group (see below). 5. Grant **Analyze** (and other apps) on **App access** if they should open those apps at all. Turning **Manager** off fails while they are still on any group’s manager list—remove them from those lists first. ### Manager Permissions (Per Group) [#manager-permissions-per-group] When you add or edit a manager on a group, you can enable: | Permission (UI label) | Effect | | ----------------------------------------- | ------------------------------------------------------------------------------------------------------ | | **View group results in Analyze** | Results in **Analyze** for users in this group | | **Manage group members** | Add/remove members on **manual** groups (smart/external membership stays automatic or directory-owned) | | **Approve content requests from Academy** | Shown when Academy content approval is enabled for the workspace | A person can be a manager of several groups with different permission mixes. ### What Managers Can Do in Users & Groups [#what-managers-can-do-in-users--groups] * Open only the groups they oversee * Review **members** of those groups * Edit **manual** member lists when they have **Manage group members** * Approve **Academy** content requests when they have that permission and the **Content** tab is available * They do **not** open full user profiles (certificates, licenses, **App access**, and so on) from this manager view ### Analyze Scope [#analyze-scope] If a manager has access to **Analyze** and **View group results in Analyze** on a group, they can see results for users in that managed group—not only results for content assigned through the group itself. Administrators still see the whole workspace. Creators and collaborators with **Analyze** access follow content they own—see [Analyze](/docs/analyze). ### Related [#related] * [Groups](/docs/users-and-groups/groups) · [Smart Groups](/docs/users-and-groups/smart-groups) * [Users and Profiles](/docs/users-and-groups/users-and-profiles) * [Analyze](/docs/analyze) * [Track Team Progress in Analyze](/docs/use-cases/track-team-progress) # Smart Groups (https://docs.skillhabit.com/docs/users-and-groups/smart-groups) ### What This Is For [#what-this-is-for] A **smart group** adds and removes members **automatically** from rules you set on workspace [custom attributes](/docs/configure/custom-attribute-fields). You do not maintain a hand-edited member list. Use smart groups when membership should follow profile data—department, location, job family, and similar—rather than someone remembering to add and remove people. Smart groups are **not** the same as **External Groups** from Entra or SCIM. External groups sync from a directory; smart groups evaluate Skillhabit attributes. You can use both in one workspace. ### Who This Is For [#who-this-is-for] Workspace **administrators** (to create rules and assign managers). Managers of a smart group can review members and, with permission, approve Academy requests—but they cannot hand-pick membership. ### Before You Start [#before-you-start] 1. Define the attributes and choices you need under **Configure** → [Custom Attribute Fields](/docs/configure/custom-attribute-fields) (usually **Single Select** or **Multi Select** for clean rules). 2. Make sure users have values set (on create, on the profile, via registration, or via provisioning/API). 3. Decide who should be **managers** of the group and which permissions they need ([Managers](/docs/users-and-groups/managers)). ### How Membership Works [#how-membership-works] * Each condition picks an **Attribute** and one or more **Value** choices (or system options like **Any choice** / **All choices** where offered). * You can **Add another condition**. People must satisfy the group’s condition set to stay in the group (membership updates as attribute values change). * The member list in the group editor is **read-only**—edit attributes on the user (or in the source system that fills them), not the list itself. ### Create a Smart Group [#create-a-smart-group] 1. Open **Users & Groups** → **Add** → **Create Groups**. 2. Enter a **Group Name**. 3. Choose **Smart Group**. 4. Under **Smart Group Conditions**, pick an attribute and value(s). Add more conditions if needed. 5. Confirm. Skillhabit opens the group editor on the **Conditions** tab so you can refine rules and assign managers. ### Edit an Existing Smart Group [#edit-an-existing-smart-group] Open the group from the **Groups** tab (filter **Smart Groups** if the list is long). Tabs: | Tab | What you do | | --------------------- | -------------------------------------------------------------- | | **Basic information** | Name, managers, view members (membership not editable by hand) | | **Conditions** | Change the attribute rules | | **Content** | Academy content requests (when that capability is enabled) | ### Tips [#tips] * Prefer stable select attributes for rules. Changing an attribute’s **type** in Configure can clear everyone’s values and break smart group rules—see [Custom Attribute Fields](/docs/configure/custom-attribute-fields). * For directory-owned org structure, prefer synced **External Groups** ([User Provisioning](/docs/external-identity-providers/user-provisioning)) and use smart groups for Skillhabit-only attributes. * After rules look right, assign managers so team leads can use **Analyze** and approvals without full admin rights. ### Related [#related] * [Groups](/docs/users-and-groups/groups) — manual and external overview * [Managers](/docs/users-and-groups/managers) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Users and Profiles](/docs/users-and-groups/users-and-profiles) * [Onboard a Department](/docs/use-cases/onboard-a-department) # Users and Profiles (https://docs.skillhabit.com/docs/users-and-groups/users-and-profiles) ### What This Is For [#what-this-is-for] A **user** is one Skillhabit account. There are no separate systems for learners, creators, managers, or administrators—**roles** and **App access** decide which apps open. An administrator can still take courses like anyone else. This page covers creating and editing people **inside** **Users & Groups**. When a directory or API should own joiners and leavers, use [User Provisioning](/docs/external-identity-providers/user-provisioning) instead (or as well). ### Who This Is For [#who-this-is-for] Workspace **administrators**. Managers see group members but do not open full profiles—see [Managers](/docs/users-and-groups/managers). ### Mental Model: Roles vs App Access [#mental-model-roles-vs-app-access] | Control | What it means | | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Admin** | Access to everything in the workspace (app toggles are hidden while Admin is on) | | **Manager** | Oversees assigned groups in **Users & Groups**; optionally sees those people in **Analyze** | | **App access** | Per-app cards (**Home**, **Learn**, **Create**, **Analyze**, **Certificates**, **Follow Up**, **Users & Groups**, **Configure**, **Academy**, and others your workspace offers) for people who are not Admin | Turn **Manager** on from the profile, then assign the person as a manager **on each group** (with permissions). You cannot turn Manager off while they are still listed as a manager of any group—remove them from those groups’ manager lists first. ### Browse and Filter Users [#browse-and-filter-users] On the **Users** tab you can: * Search by name or email * Filter with cards: **Administrators**, **Managers**, **Standard users**, **Archived** People provisioned from Entra, SCIM, OpenID Connect, or similar show an **external** marker (“This user was provisioned externally”). Lifecycle rules for those accounts: [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). ### Add Users [#add-users] 1. Open **Users & Groups** → **Add** → **Add Users** (or the plus control that opens the same menu). 2. Enter **Email addresses** (spaces or commas), or **Import CSV**. Valid addresses are kept; invalid values and duplicates are skipped; extra CSV columns are ignored. 3. Optionally: * Add people to groups * Set **Attributes** (workspace [custom attribute fields](/docs/configure/custom-attribute-fields)) * Set an **Archive date** for a planned end date * **Send a welcome email with a login link** (needs a real mailbox—not `@noemail.skillhabit.com`) 4. Confirm to create the accounts. For ongoing directory sync, SCIM, or API creates, see [User Provisioning](/docs/external-identity-providers/user-provisioning). ### Send Content Invitations [#send-content-invitations] From **More actions** → **Send Content Invitations**, invite individuals or groups to courses. That sends an invitation email (similar in tone to a mandatory assignment notice)—even if a mandatory assignment email may follow later. ### User Profiles [#user-profiles] Open a user from the list. The profile shows name, email, custom fields, metadata, and **Last active at**. You can see group membership and add or remove the person from **manual** groups (smart and external membership follows rules or the directory). #### App Access [#app-access] On the profile, **App access** is where you set **Manager**, **Admin**, and per-app cards. Details above under [Mental Model: Roles vs App Access](#mental-model-roles-vs-app-access). #### Managed Content [#managed-content] **Managed Content** lists content the user is linked to as a **Creator** or **Collaborator**: * Search and open the list; click an item to edit it in **Create** * Creators and collaborators with **Analyze** access can see results for that content in **Analyze** #### Certificates [#certificates] Administrators can view current certificates, issue new ones with results, and renew or delete existing certificates. #### Sessions [#sessions] Administrators can open the **Sessions** tab on a user’s profile to audit and revoke sign-ins: * See active sessions (created, last used, expiry, and device hints when available) * **Revoke session** for one device, or **Revoke all sessions** * Review **Session history** for signed-out and expired sessions Revocation forces that person to sign in again; it can take about **15 seconds** to take effect. People can also manage their own devices under **Profile** → **Active sessions**—see [SSO and Authentication](/docs/external-identity-providers/sso-and-authentication#active-sessions). How long **new** sessions last: [Login Session Duration](/docs/configure/auto-archive#login-session-duration). #### Content Attempts [#content-attempts] Under **Content Attempts**, see courses with attempt limits that the user has tried. Reset the attempt count so they can start again. #### Licenses [#licenses] Administrators can **Add license** on the profile—for example after an external payment or to fix access. Issuing a license also applies **individual visibility**, so the product appears in that user’s **Learn** library. To see every issued license for a catalog item, edit that content’s **visibility and access** in **Academy** and open **Manage licenses**. Licenses from Academy sales are issued when the order completes. See [Content Licenses](/docs/academy/content-licenses). ### Archive and Delete [#archive-and-delete] For users who are **not** externally provisioned, use **More actions** on the profile or user list: | Action | When to use it | | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | **Archive now** | Stop login immediately; data is kept so you can restore later | | **Set archive date** / **Change archive date** | Plan an end date (for example contractors) | | **Cancel scheduled archival** | Clear a planned archive date | | **Unarchive** | Restore login before permanent deletion | | **Delete User** | Permanent removal of data, progress, and history—prefer archive when you might need the account again | Workspace **Admin** accounts have a reduced menu toward other users (no archive or delete on normal accounts). **Reactivate email** can still appear when delivery is inactive—see [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email). Externally provisioned users follow different rules on that same page (no manual archive or delete; directory owns lifecycle). ### Related [#related] * [Users & Groups](/docs/users-and-groups) — hub * [Groups](/docs/users-and-groups/groups) · [Smart Groups](/docs/users-and-groups/smart-groups) · [Managers](/docs/users-and-groups/managers) * [Bulk Actions and Email](/docs/users-and-groups/bulk-actions-and-email) * [Invite Users and Set App Access](/docs/use-cases/invite-users-and-set-access) * [User Provisioning](/docs/external-identity-providers/user-provisioning) * [Custom Attribute Fields](/docs/configure/custom-attribute-fields) * [Auto Archive](/docs/configure/auto-archive) # AI Course Studio (https://docs.skillhabit.com/docs/create/ai-powered-creation/ai-course-studio) ### What This Is For [#what-this-is-for] **AI Course Studio** (**Beta** in the product) walks you from a prompt to a full **built-in course** draft: **Start** → **Context** → **Outline** → generation → course editor. Use it when you want a new course scaffolded from a topic and optional source files—not when you only need a few blocks inside an existing course ([Generate With AI](/docs/create/ai-powered-creation/generate-with-ai)). ### Who This Is For [#who-this-is-for] Authors in workspaces with the **AI** capability. You still review and publish like any other course. ### Before You Start [#before-you-start] * Confirm **AI Course Studio** appears on the Create start page (ask Skillhabit if missing). * Have a clear topic (at least **15 characters** for the prompt). * Optional: PDFs, Word, or plain text files, or public `http`/`https` file URLs (path should end with a file extension such as `.pdf`). Skillhabit uses OpenAI to help generate courses. Submitted files or text may be retained in their systems for up to **30 days** (notice shown on **Start**). Details for security reviewers: [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy). ### Steps — Start [#steps--start] 1. Open **Create** → **AI Course Studio**. 2. Describe the course in the prompt. 3. Optionally **Upload files** or **Add file URLs**. 4. Continue to generate course context. ### Steps — Context [#steps--context] Review and adjust: * **Compliance requirement** * **Course length** — **Express** (\~10–15 minutes) through **Essential**, **Comprehensive**, and **Full Scale** (2+ hours) * **Certification rigor** — **Participation** through **Foundational**, **Professional**, and **Advanced Mastery** * **Required competencies**, **Target audience**, **Tone of language**, **Language** * Optional **Generate images with AI** (**Illustration** or **Realistic**—experimental; review in the editor) Use **Ask AI** on **Context** or **Outline** to describe changes in natural language. Choose **Generate Course Outline** when ready. ### Steps — Outline [#steps--outline] 1. Edit **course title**, **course description**, and **chapters** (title, description, **chapter type**, compliance outcomes). 2. Chapter types: **Informative**, **Mixed**, or **Questions Only**. 3. Reorder, add, or remove chapters. 4. Choose **Generate Course**. ### Generation Progress [#generation-progress] Generation runs chapter by chapter (**Queued**, **Generating content**, **Generating questions**, **Generating images**, **Completed**, or **Failed**). It can take several minutes. On success you land in the **course editor**. On failure, acknowledge the error and try again from the start page. You can move back to earlier stepper steps after they are completed; closing with unsaved work prompts you to discard or keep editing. ### Result [#result] A **draft** built-in course. Review content, assessments, images, and compliance alignment, then configure visibility and **Publish**. ### Related [#related] * [Generate With AI](/docs/create/ai-powered-creation/generate-with-ai) * [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy) * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) * [Publishing Updates](/docs/create/supported-content-types/publishing-updates) # Generate With AI (https://docs.skillhabit.com/docs/create/ai-powered-creation/generate-with-ai) ### What This Is For [#what-this-is-for] **Generate with AI** lives in the **built-in course** chapter editor. Use it to add or refine material from a prompt on an **existing** course—without running the full **AI Course Studio** wizard. ### Who This Is For [#who-this-is-for] Authors editing a course in **Create**, in workspaces where AI is enabled. ### Before You Start [#before-you-start] * Open a built-in course you can edit. * Decide whether the prompt should apply to the **current chapter**, a **selected element**, or the **whole course**. ### Steps [#steps] 1. Open the course → chapter content editor. 2. Choose **Generate with AI**. 3. Enter a prompt; set scope (chapter / element / course), tonality, and language as offered. 4. Review the suggestion → **accept** or **reject** before it becomes part of your draft. 5. Continue editing manually, then publish when ready ([Publishing Updates](/docs/create/supported-content-types/publishing-updates) if the course is already live). ### Result [#result] Accepted suggestions become normal draft content you can edit like any other blocks. ### Related [#related] * [AI Course Studio](/docs/create/ai-powered-creation/ai-course-studio) * [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy) * [Building Blocks](/docs/create/supported-content-types/building-blocks) * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) # AI-Powered Creation (https://docs.skillhabit.com/docs/create/ai-powered-creation) ### What This Section Is About [#what-this-section-is-about] Skillhabit offers two AI-assisted paths in **Create**. Both need the **AI** capability enabled for your workspace. When AI is on, **AI Course Studio** appears on the Create start page. | Path | Job | | -------------------- | ------------------------------------------------------------------------------------------------------- | | **AI Course Studio** | Turn a topic (and optional files) into a **new** built-in course draft—optional **AI image generation** | | **Generate with AI** | Add or refine material **inside** an existing course editor | Generated output is always a **draft**—review before you publish. Before rolling AI out company-wide, read **[AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy)** (OpenAI processing, 30-day logging notice, and safe-use checklist). ### Who This Is For [#who-this-is-for] Authors with **Create** access in workspaces where AI is enabled. Security and privacy reviewers should start with the privacy page above. ### Guides [#guides] ### Related [#related] * [AI Creation & Data Privacy](/docs/ai-creation-and-data-privacy) * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) * [Trust & Security](/docs/trust-and-security) * [Create](/docs/create) # Building Blocks (https://docs.skillhabit.com/docs/create/supported-content-types/building-blocks) ### What This Is For [#what-this-is-for] **Building blocks** (elements) are the pieces you add inside a built-in course chapter—from text and images to graded questions and surveys. Exact labels match the **Add element** menu in the course editor. ### Who This Is For [#who-this-is-for] Course authors in **Create**. ### Block Types [#block-types] #### Text and Files [#text-and-files] | UI label | Use for | | -------- | ------------------------------------------ | | **Text** | Paragraphs, headings, and formatted copy | | **File** | Downloadable PDF, Word, Excel, and similar | #### Images [#images] | UI label | Use for | | ----------------------- | ------------------------------------------ | | **Image** | A single image, optional caption | | **Image with text** | Text beside an image (left or right) | | **Image slideshow** | Several images learners step through | | **Image grid** | Several images in a grid | | **Image with hotspots** | Clickable hotspots that reveal information | | **Image question** | A question whose answers are images | #### Questions and Reflection [#questions-and-reflection] | UI label | Use for | | ---------------------------- | -------------------------------------------------------------------- | | **Single-choice question** | One correct answer; optional feedback and highlight-on-wrong | | **Multiple-choice question** | Several correct answers; optional feedback and highlight-on-wrong | | **Reflection question** | Open-ended; **not graded** (review in **Follow Up** / related flows) | #### Audio and Video [#audio-and-video] | UI label | Use for | | ---------------- | ----------------------------- | | **Audio** | Uploaded audio | | **Record audio** | Learner records in the course | | **Video** | URL embed or uploaded video | | **Record video** | Learner records in the course | #### Surveys [#surveys] | UI label | Use for | | ------------------- | ---------------------------------------- | | **Survey question** | Multiple-choice feedback; **not graded** | | **Survey text** | Open-ended feedback; **not graded** | Survey options: * **Anonymity** can be turned on and **cannot be undone**. * Results appear in **Analyze**. For anonymous surveys, results are only available after **at least three** users have responded. ### Related [#related] * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) * [Course Settings and Features](/docs/create/supported-content-types/course-settings-and-features) * [Generate With AI](/docs/create/ai-powered-creation/generate-with-ai) # Built-In Courses (https://docs.skillhabit.com/docs/create/supported-content-types/built-in-courses) ### What This Is For [#what-this-is-for] **Built-in courses** are courses you design **inside Skillhabit**—chapters, building blocks, questions, and media—without importing SCORM. ### Who This Is For [#who-this-is-for] Collaborators and administrators who author in **Create**. Learners take published courses in **Learn**. ### Before You Start [#before-you-start] * You have the **Create** app (and collaborator access if editing someone else’s course). * Optionally use [AI Course Studio](/docs/create/ai-powered-creation/ai-course-studio) for a first draft. ### Steps — Create and Publish [#steps--create-and-publish] 1. Open **Create** → create a new course (or open an existing draft). 2. Add chapters and [building blocks](/docs/create/supported-content-types/building-blocks). 3. Open the configuration page for title, description, **Visibility and targets**, certificates, and [course options](/docs/create/supported-content-types/course-settings-and-features). 4. **Publish** when ready. Later structural or in-place updates: [Publishing Updates](/docs/create/supported-content-types/publishing-updates). ### Result [#result] A published course learners can take when they have visibility (and licenses, if configured). ### Related [#related] * [Building Blocks](/docs/create/supported-content-types/building-blocks) * [Course Settings and Features](/docs/create/supported-content-types/course-settings-and-features) * [Publishing Updates](/docs/create/supported-content-types/publishing-updates) * [AI-Powered Creation](/docs/create/ai-powered-creation) # Course Settings and Features (https://docs.skillhabit.com/docs/create/supported-content-types/course-settings-and-features) ### What This Is For [#what-this-is-for] On a built-in course configuration page, **Course options** and related settings control how learners experience attempts and feedback. Collaboration and publishing are nearby actions on the same content. ### Who This Is For [#who-this-is-for] Course authors and administrators in **Create**. ### Real-Time Collaboration [#real-time-collaboration] Several collaborators can work on the same course. Add people with **Collaborate**—[Collaborator Access](/docs/create/collaborator-access). ### Immediately Correct Answers After Each Part [#immediately-correct-answers-after-each-part] Under **Course options**: * **On** — learners get feedback after each part (for example after a question block), instead of waiting until the whole course finishes. * **Off** — answers are evaluated together at the end of the course. UI label: **Immediately correct answers after each part**. ### Limit Number of Attempts [#limit-number-of-attempts] 1. Open **Course options**. 2. Enable **Limit number of attempts**. 3. Set **Number of attempts** (typically **1–99**). Learners see remaining attempts on the course overview. Before the **last** attempt, they get a confirmation dialog. When attempts are exhausted, they cannot start again or view their answers. Administrators can reset attempts on a user profile in **Users & Groups** under **Content Attempts**. Learner-facing behaviour: [Attempt Limits](/docs/learn/attempt-limits). Interaction with licenses: [Content Licenses](/docs/academy/content-licenses). ### Versioning and Publishing Updates [#versioning-and-publishing-updates] Published courses update as a **patch** or a **new revision** via **Publish changes** and **Increment revision number**. Full rules: [Publishing Updates](/docs/create/supported-content-types/publishing-updates). ### Related [#related] * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) * [Publishing Updates](/docs/create/supported-content-types/publishing-updates) * [Attempt Limits](/docs/learn/attempt-limits) # Supported Content Types (https://docs.skillhabit.com/docs/create/supported-content-types) ### What This Section Is About [#what-this-section-is-about] **Create** supports several content types. Pick the type that matches the job, then publish and assign visibility. | Type | Best when | | -------------------- | ----------------------------------------------------------------- | | **Built-in course** | You author slides, questions, and media in Skillhabit | | **SCORM** | You import a package from an external tool | | **Meetup** | Live or in-person sessions with attendance in **Follow Up** | | **Program** | A path that combines courses, SCORM, and meetups | | **Learning journey** | A program shown as a visual map with hotspots (**Journey** order) | ### Who This Is For [#who-this-is-for] Authors and administrators building the catalog in **Create**. ### Guides [#guides] ### Related [#related] * [Create](/docs/create) * [AI-Powered Creation](/docs/create/ai-powered-creation) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) # Learning Journey Maps (https://docs.skillhabit.com/docs/create/supported-content-types/learning-journey-maps-program-themes) ### What This Is For [#what-this-is-for] A **learning journey** turns a program into a visual map: a background image with **hotspots**. Each hotspot is a step—informational (title, description, media) and/or linked to program content. In Create, program **Order** is set to **Journey**, then you use **Edit Journey** / **Save Journey**. Journey editing is available when the capability is enabled for your workspace—if you do not see it, contact Skillhabit. ### Who This Is For [#who-this-is-for] Program authors who want a guided graphical overview (onboarding paths, story-led curricula). Learners explore the map in **Learn**. ### Map Rules vs Program List Rules [#map-rules-vs-program-list-rules] | Concern | Where it lives | | -------------------------------------------- | ------------------------------------------------------- | | Hotspot **ordered** / **unordered** sequence | Journey map only (**Hotspot order**) | | **Scheduled Unlocks** | Program schedule settings—not the same as hotspot index | | Which items belong to the program | Program content list (fixed after publish) | ### What Authors Configure [#what-authors-configure] * **Map layout** — background image; position hotspots for desktop and, where supported, smaller screens * **Hotspot content** — title, description, and/or **media** (image, video, audio); optionally link **one or more** courses, SCORM packages, or meetups * **Hotspot order** — **Unordered** (open anytime) or **Ordered** (locked until the learner’s journey index reaches that step) * **Add Hotspot** / edit via the journey editor; **Save Journey** when done ### After Publish [#after-publish] You can still update the map (images, positions, order flags, titles, descriptions, media). You **cannot** change which program items exist or which items are linked in each hotspot—see [Programs](/docs/create/supported-content-types/programs). ### What Learners See [#what-learners-see] * Programs with a journey may open on the map when learners **start** or **continue**. * **Ordered** hotspots can appear **locked** until the journey sequence reaches them; **unordered** hotspots do not lock that way. * On the map, a hotspot with linked content shows whether **everything** inside is complete—not per-item progress (open the hotspot for detail). * Informational-only hotspots are for reading / media on the map. * A short **welcome** tour may appear the first time; learners can dismiss it. ### Before You Start [#before-you-start] * Program exists with the items you plan to link. * **Order** is set to **Journey**. ### Steps [#steps] 1. Open the program in **Create**. 2. Set **Order** to **Journey**. 3. Choose **Edit Journey**. 4. Add a background, **Add Hotspot**, set content and **Hotspot order**. 5. **Save Journey**, then **Publish** the program when ready. ### Related [#related] * [Programs](/docs/create/supported-content-types/programs) * [Visibility in Learn](/docs/learn/visibility) # Meetups (https://docs.skillhabit.com/docs/create/supported-content-types/meetups) ### What This Is For [#what-this-is-for] **Meetups** are scheduled events—online or in person—with date, time, and location. Learners enroll (or are assigned); attendance is confirmed in **Follow Up**, which can drive completion and certificates. ### Who This Is For [#who-this-is-for] Authors who create the meetup in **Create**; facilitators who approve attendance in **Follow Up**; learners who register and attend. ### Before You Start [#before-you-start] * Decide self-enrollment vs assigned attendees via **Visibility and targets**. * Meetups **cannot** currently be marked **Mandatory**. * If a certificate should issue after attendance, plan [Certificate Configuration](/docs/create/certificate-configuration). ### Steps [#steps] 1. Open **Create** → create a **meetup**. 2. Set schedule, location / meeting details, and description. 3. Configure **Visibility and targets** (and Academy if needed). 4. Optionally enable **Certificate issuance** (issues after attendance is approved). 5. **Publish**. 6. After the event, submit / approve attendance in **Follow Up**—see [Meetup Attendance](/docs/follow-up/meetup-attendance) and [Run a Meetup](/docs/use-cases/run-a-meetup). ### Result [#result] Attendees have a scheduled event in **Learn**; approved attendance records completion (and certificates when configured). ### Related [#related] * [Run a Meetup](/docs/use-cases/run-a-meetup) * [Certificate Configuration](/docs/create/certificate-configuration) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) # Programs (https://docs.skillhabit.com/docs/create/supported-content-types/programs) ### What This Is For [#what-this-is-for] A **program** groups courses, SCORM packages, and meetups into one path. Learners open the program in **Learn** and work through included items—optionally on a schedule or as a visual **Journey**. ### Who This Is For [#who-this-is-for] Authors designing curricula in **Create**. Learners consume programs in **Learn**; sales may use **Academy** licenses at the **program** level. ### Order Modes [#order-modes] Under program **Order** (labels in Create): | Mode | Meaning | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | **Any** | Learners can open included items in any order | | **Sequential** | Step-by-step progression through the list | | **Journey** | Visual learning journey map with hotspots—[Learning Journey Maps](/docs/create/supported-content-types/learning-journey-maps-program-themes) | ### Scheduled Unlocks [#scheduled-unlocks] **Scheduled Unlocks** release program items on an interval (for example daily or weekdays) with optional unlocking conditions. This is the UI name for what people sometimes call a “drip” schedule. ### Visibility and Licenses [#visibility-and-licenses] * Learners who can access the **program** can open **included** items **from the program**, even when those items do not appear alone in **Learn**—[Visibility in Learn](/docs/learn/visibility). * With Academy **licenses**, a **program** uses a **single program-level license**. Inner items do not each need their own license for that purchase path. Starting the program with a license resets exhausted inner attempts only—details: [Content Licenses](/docs/academy/content-licenses). * A license **only** for an included course sold separately does **not** replace a required **program** license when the program is the licensed product. ### After Publish — What Is Locked [#after-publish--what-is-locked] Once a program is **published**, you **cannot** change **which** courses, SCORM packages, and meetups **belong to the program**, or **which items are linked inside each journey hotspot**. You **can** still: * Update the **learning journey** map (background, hotspot positions, ordered vs unordered, titles, descriptions, media) * Update the **materials inside** each included course or item (as with any published content) ### Before You Start [#before-you-start] * Create or identify the inner courses / SCORM / meetups. * Decide **Any**, **Sequential**, or **Journey**, and whether **Scheduled Unlocks** are needed. ### Steps [#steps] 1. Open **Create** → create a **program**. 2. Add content items to the program. 3. Set **Order** (**Any** / **Sequential** / **Journey**). For **Journey**, use **Edit Journey**. 4. Optionally configure **Scheduled Unlocks**. 5. Set **Visibility and targets**, certificates, and Academy / licensing. 6. **Publish**. ### Related [#related] * [Learning Journey Maps](/docs/create/supported-content-types/learning-journey-maps-program-themes) * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Content Licenses](/docs/academy/content-licenses) * [Programs in Learn](/docs/learn/programs) # Publishing Updates (https://docs.skillhabit.com/docs/create/supported-content-types/publishing-updates) ### What This Is For [#what-this-is-for] When a **published** built-in course has unpublished edits, **Publish changes** asks whether to keep the same revision (**patch**) or **Increment revision number** (**new revision**). Mixing these up is the most common publishing surprise: patches keep learners in place; new revisions can force a restart. ### Who This Is For [#who-this-is-for] Course authors publishing updates in **Create**. ### Patch vs New Revision [#patch-vs-new-revision] | Choice | UI | What happens | | ---------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | **Patch** | **Increment revision number** = off → **Publish Patch (Revision *n*)** | Same revision; updates apply **in place**; mid-course learners typically keep their place after refresh | | **New revision** | **Increment revision number** = on → **Publish Revision *n+1*** | Revision increases; learners move to the new version (often need to restart) | You always **Describe what changed** (kept for history). Optionally **Notify users via email** (people who already have a result). Under **Advanced options**, **Force reset all previously completed results** can reset completed results and issued certificates when your organisation requires it—independent of patch vs revision. ### When Increment Is Locked On [#when-increment-is-locked-on] If the platform detects **structural changes** vs the last published version, **Increment revision number** is locked to **Yes**. A patch is only allowed when the course architecture matches the live version. Structural changes include any of: * **Element IDs** — add, remove, or replace elements (not only edits inside the same element) * **Element order** — reordering the sequence * **Chapter structure** — chapter identities or which elements belong to which chapter * **Question choice IDs** — add, remove, or replace answer identifiers on quiz questions * **Passing criteria** — change to **Number of correct answers required** per chapter (where used) Typos, wording, or media swaps **inside** the same elements can usually publish as a **patch** when the toggle stays off. ### Before You Start [#before-you-start] * Know whether your edit is cosmetic (prefer patch) or structural (expect a new revision). * Decide whether to email people with existing results and whether to force-reset completions. ### Steps [#steps] 1. Finish edits in the course editor. 2. Choose **Publish** / **Publish changes**. 3. Enter **Describe what changed**. 4. Optionally enable **Notify users via email**. 5. Open **Advanced options**: set **Increment revision number** if allowed; optionally **Force reset all previously completed results**. 6. Confirm **Publish Patch (Revision *n*)** or **Publish Revision *n***. ### Result [#result] Learners see the update according to patch vs revision rules; revision history remains available on the course. ### Related [#related] * [Course Settings and Features](/docs/create/supported-content-types/course-settings-and-features) * [Built-In Courses](/docs/create/supported-content-types/built-in-courses) * [Managing Content](/docs/create/managing-content) # SCORM (https://docs.skillhabit.com/docs/create/supported-content-types/scorm) ### What This Is For [#what-this-is-for] **SCORM** content lets you **import** courses built in external tools and run them in Skillhabit **Learn**, with the same visibility, certificate, and Academy options as other Create items. ### Who This Is For [#who-this-is-for] Authors who already produce SCORM packages and administrators who publish them in **Create**. ### Before You Start [#before-you-start] * Package is **SCORM 1.2** or **2004**, up to about **2.5 GB**. * You have the **Create** app. ### Steps [#steps] 1. Open **Create** → create or open a SCORM item. 2. Upload the package. 3. Configure title, **Visibility and targets**, certificates, and Academy as needed. 4. **Publish**. ### Updating a Published Package [#updating-a-published-package] When you publish a **new** SCORM package for an existing item, progression for users who have **not completed** the SCORM is **reset**. Plan communications before replacing a live package. SCORM **Publish changes** supports revision notes and email notify; it does **not** use the built-in course **patch vs Increment revision number** dialog. ### Related [#related] * [Enrollment and Notifications](/docs/create/enrollment-and-notifications) * [Certificate Configuration](/docs/create/certificate-configuration) * [Supported Content Types](/docs/create/supported-content-types)