Skip to documentation
    Local Plugin · local_recertify

    Course Recertification

    Automatically resets activity completion, course completion, and optionally grades for enrolled learners on a recurring schedule — so they must re-certify every N months. Advance warning notifications, configurable reset depth, and a full audit log.

    See archived Requirements
    v1.2.1
    No AI credits required
    Training programs and certification cycles

    Course Recertification also works with Training Pathways, AI Training Matrix and Certificate Pro. Keep ordinary reset schedules separate from additive certification cycles: a reset schedule does not itself prove competency or certificate validity.

    Use a dedicated Certificate Pro issuer for a certification cycle. Historical issued documents remain unchanged; renewal requirements and current validity are evaluated separately. Review the selected reset scope before enabling a schedule.

    ⭐ Why this plugin is unlike anything else available

    Automatic re-enrolment before certification expires

    ▸ Moodle has no native mechanism to detect certificate expiry and trigger re-enrolment. Course Recertification monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and automatically re-enrols the learner in the refresher course when the deadline passes — without any admin action.

    ▸ Configurable warning notice: set how many days before reset an advance warning email and Moodle notification are sent (default 14 days).

    ▸ Tracks the full recertification history — original completion, each renewal, and the certifying body — so compliance officers can produce a lifecycle report for any learner without manual record-keeping.

    What it does

    Relative (Rolling) Schedule

    Reset triggers N months after each learner's enrolment date — everyone gets their own anniversary. Perfect for compliance recertification where the clock starts on enrolment.

    Fixed Calendar Schedule

    Reset on a fixed annual date (e.g. 1 Jan or 1 Jul) regardless of when the learner enrolled. Suited to industry-wide licence renewal cycles.

    Advance Warning Notifications

    Email + Moodle notification sent N days before reset so learners know recertification is coming. A second notification fires at the moment of reset.

    Configurable Reset Depth

    Choose how deep the reset goes: completion only; completion + grades; or full data wipe (quiz attempts, assignment submissions, SCORM tracks). Each level is independently toggleable.

    All Activity Types

    Works with all Moodle activity types including third-party and LMS Labs plugins via the central course_modules_completion table. Extensible per module via the _recertify_reset_userdata callback.

    Full Audit Log

    Every reset is logged — who, when, which course, which schedule, and what depth. Audit log is accessible from Site administration and exportable to CSV.

    Reset Depth Options

    LevelWhat gets resetUse case
    Completion onlyActivity completion marks + course completion recordLearner must re-complete activities; prior grades and attempts remain
    Completion + gradesEverything above + gradebook entriesClean slate for graded courses; quiz attempts remain in mdl_quiz_attempts
    Full data wipeEverything above + quiz attempts, assignment submissions, SCORM tracksRegulatory recertification requiring a completely fresh attempt record

    Configuration Settings

    SettingDescriptionDefault
    Schedule typeRelative (rolling anniversary from enrolment) or Fixed (calendar date).Relative
    Recertification intervalFor relative: months between resets. For fixed: the annual reset date (MM-DD).12 months
    Warning notice (days)Send advance warning notification this many days before the reset fires.14
    Reset depthCompletion only · Completion + grades · Full data wipe.Completion only
    Wipe quiz attemptsPart of full data wipe — removes mdl_quiz_attempts rows.Off
    Wipe assignment submissionsPart of full data wipe — removes mdl_assign_submission rows.Off
    Wipe SCORM tracksPart of full data wipe — removes mdl_scorm_scoes_track rows.Off
    Notify on resetSend email + Moodle notification at the moment of reset.On
    Enable audit logLog every reset to the plugin's audit table.On

    Settings live at Site administration → Plugins → Local plugins → Course Recertification. Per-course overrides are available from the course settings menu once the plugin is installed.

    Installation

      1

      Download the ZIP from lms-labs.com → Plugins → Course Recertification.

      2

      In Moodle: Site administration → Plugins → Install plugins. Upload the ZIP and click Install.

      3

      Complete the plugin installation confirmation page.

      4

      Navigate to Site administration → Plugins → Local plugins → Course Recertification to configure the default schedule, reset depth, and notification settings.

      5

      Open any course → Course settings → Recertification tab to enable recertification for that course and override the site defaults if needed.

      6

      The plugin runs via Moodle's scheduled task system. Ensure cron is running (recommended: every minute) so resets fire on time.

    Security & Privacy

    • All admin pages use require_login() + require_capability()

    • Scheduled task runs under Moodle cron context — no web-facing attack surface

    • Audit log entries are append-only; no UI allows deletion (GDPR export is supported)

    • No external API calls — no AI credits required, no portal dependency

    • Full GDPR Privacy Provider implemented — personal data in the audit log is exportable and deletable on user request

    • GPL v3 licence

    Full data wipe is irreversible

    The "Full data wipe" reset depth permanently deletes quiz attempts, assignment submissions, and SCORM tracking records. This cannot be undone. Test on a staging site before enabling this level in production.

    Support & Questions

    For installation help, bug reports, or feature requests, visit lms-labs.com or open a support ticket via your LMS Labs account portal.

    Moodle Marketplace

    Course Recertification
    local_recertify
    Every field below matches a Marketplace edit screen, in the exact order the submission flow asks for it. Work top to bottom, copy field by field.
    marketplace.moodle.com

    Use this plugin on its own — or make the whole suite simpler

    Course Recertification works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See LMS Labs pricing and AI credits for current plans.

    Using more than one LMS Labs plugin? These companions are free on LMS Labs:

    • AI Grader Central Config — enter the Site ID and API key once; compatible plugins can read the same values, so you do not need to enter them again in every plugin.
    • AI Dashboard Quick Links — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.

    Both are optional, free companion plugins and require no LMS Labs credit unlock. Any AI credits used by connected plugins remain separate metered usage.

    1

    Overview

    Appears on your plugin page and in search results — name, icon, short description, screenshots.

    Plugin name*

    Icon*

    Upload this PNG as the plugin icon. Minimum dimensions 200×200 px — this file is 1024×1024.

    Course Recertification Marketplace icon

    1024×1024 PNG, under 200 KB — comfortably above the 200×200 px minimum and under the 10 MB upload limit.

    Short description*

    Search cards show only the first 119 characters — the opening line has to sell on its own.

    233/256 characters

    Screenshots

    Show meaningful features in use — the main UI, an important workflow, a finished report or dashboard. Must be at least 128 px wide and no more than 480 px wide. Avoid empty states, unreadable detail, and near-duplicate shots.

    2

    Description

    The main sales pitch on your plugin page — paste into the rich-text editor, then bold the headings.

    Description*

    Starts with the standalone-or-connected-suite setup, then gives the product pitch, requirements, external services and pricing.

    2,912/7,000 characters

    Marketplace page HTML

    The complete listing page — the standalone/connected-suite setup appears first, followed by the product description. In the Marketplace description editor, switch to HTML source view (</> button) and paste it in one go. The Marketplace may strip style attributes, so the paste block uses semantic headings, paragraphs, lists, links, and one root element; confirm the saved listing after submission.

    Preview

    Use this plugin on its own — or make the whole suite simpler

    This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See LMS Labs pricing and AI credits for current plans.

    Highly recommended when you use more than one LMS Labs plugin:

    • AI Grader Central Config (free) — enter the Site ID and API key once. Compatible plugins can read the same values, so you do not need to enter them again in every plugin.
    • AI Dashboard Quick Links (free) — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.

    Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: Course Recertification documentation.

    Re-Certification That Runs Itself

    Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.

    Local plugin · v1.2.1 · Moodle™ 4.4 - 5.x · Paid — 50 Credits ($5 USD) (one-off)

    Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.

    Why This Beats Manual Tracking

    Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.

    Key Features

    • Recurring reset — reset activity completion, course completion and optionally grades on a schedule.
    • Flexible scheduling — choose a relative rolling anniversary or a fixed calendar schedule.
    • Configurable reset depth — reset just completion, or deeper attempt data, matched to your use case.
    • Advance warnings — send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.
    • Full history — track original completion, every renewal and the certifying body for a per-learner lifecycle report.
    • Audit log — append-only entries record every reset, with GDPR export supported.
    • Per-course overrides — set site defaults, then override behaviour from a course's settings menu.

    Who It Is For

    • RTOs and TAFEs delivering training that must be re-certified periodically.
    • Employers and compliance teams managing safety-critical or licence-based competencies.

    Requirements And Compatibility

    • Moodle 4.4 to 5.x.
    • PHP 7.4 or later.
    • No AI account or credits required. The plugin makes no external API calls.

    Getting Started

    Install via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.

    Documentation And Support

    Full documentation is at lms-labs.com/docs/course-recertification. Support is at support@lmshostingservices.com.

    Pricing

    This plugin is available on the Moodle Marketplace for 50 Credits ($5 USD) (one-off). An LMS Labs account (free) is required to use AI features.

    3

    Support

    Links that help customers find help, report issues, and get the most from the plugin.

    Issue/bug tracker URL*

    Documentation

    Website

    Discussion

    Privacy information

    What data (if any) leaves the customer's Moodle site — Moodle requires external services disclosed before purchase.

    4

    Pricing and billing

    Use the canonical one-time acquisition price or free status shown below. AI usage credits, where applicable, remain separate metered usage.

    Price name*

    Amount (USD)*

    Billing type*

    Price description

    Shown on the pricing card — what the customer gets, stated plainly.

    Terms of Sale URL*

    Appears on your plugin page — must be consistent with the price description.

    Optional. Turn on 'Enable invoice-based purchasing' only if you want to issue and manage invoices through Stripe Connect — otherwise leave it off.

    5

    Versions

    Add new version → upload the ZIP. The main download link always points to your latest version.

    Release manifest is loading.

    Release version

    Released Aug 29, 2026.

    Maturity

    Repository branch

    The branch in the source repository that holds this release's code. All our plugin repos publish releases to main.

    Repository tag

    The git tag pinning this exact release — the release pipeline creates it automatically on every publish.

    Supported Moodle versions

    Raw compatibility statement: Moodle™ 4.4 - 5.x. version.php uses the standard 10-digit Moodle format YYYYMMDDXX (e.g. 2026081400). The Marketplace reads the version from version.php inside the uploaded ZIP.

    Version notes (latest changelog)

    6

    Contributors

    Who maintains the plugin. Only the lead maintainer can publish.

    Lead maintainer

    The lead maintainer edits the plugin page, uploads versions, and manages contributors. Add teammates as Maintainer (can edit and upload versions) or Contributor (credited on the page only).

    Technical reference

    Component (frankenstyle)

    Must match version.php $plugin->component and the ZIP root folder.

    Plugin type

    Install directory

    Licence

    Source control URL

    Support email

    Tags

    Machine-readable JSON

    Complete field set as JSON — an automated browser agent can read this block directly to populate the Marketplace edit screens.

    {
      "pluginName": "Course Recertification",
      "frankenstyle": "local_recertify",
      "pluginTypePrefix": "local",
      "pluginTypeLabel": "Local plugin",
      "installDirectory": "/local/recertify/",
      "shortDescription": "Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.",
      "fullDescription": "Standalone or connected setup\n\nThis plugin works by itself. If it asks for LMS Labs credentials, enter your site's Site ID and API key; see https://lms-labs.com/pricing.\n\nUsing several plugins? Install the free AI Grader Central Config plugin to enter credentials once for compatible plugins, and the free AI Dashboard Quick Links block for one dashboard with settings, docs and updates.\n\nRe-Certification That Runs Itself\n\nCourse Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.\n\nWhy This Beats Manual Tracking\n\nMoodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.\n\nKey Features\n\n- Recurring reset - reset activity completion, course completion and optionally grades on a schedule.\n- Flexible scheduling - choose a relative rolling anniversary or a fixed calendar schedule.\n- Configurable reset depth - reset just completion, or deeper attempt data, matched to your use case.\n- Advance warnings - send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.\n- Full history - track original completion, every renewal and the certifying body for a per-learner lifecycle report.\n- Audit log - append-only entries record every reset, with GDPR export supported.\n- Per-course overrides - set site defaults, then override behaviour from a course's settings menu.\n\nWho It Is For\n\n- RTOs and TAFEs delivering training that must be re-certified periodically.\n- Employers and compliance teams managing safety-critical or licence-based competencies.\n\nRequirements And Compatibility\n\n- Moodle 4.4 to 5.x.\n- PHP 7.4 or later.\n- No AI account or credits required. The plugin makes no external API calls.\n\nGetting Started\n\nInstall via Site administration > Plugins > Install plugins, then open Site administration > Plugins > Local plugins > Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.\n\nDocumentation And Support\n\nFull documentation is at https://lms-labs.com/docs/course-recertification. Support is at support@lmshostingservices.com.\n\n## Pricing\n\nThis plugin is available on the Moodle Marketplace for **50 Credits ($5 USD)** (one-off). An LMS Labs account (free) is required to use AI features.",
      "descriptionHtml": "<div><p><strong>Re-Certification That Runs Itself</strong></p><p><em>Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.</em></p><p>Local plugin &middot; v1.2.1 &middot; Moodle™ 4.4 - 5.x &middot; Paid — 50 Credits ($5 USD) (one-off)</p><p>Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.</p><p><strong>Why This Beats Manual Tracking</strong></p><p>Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.</p><p><strong>Key Features</strong></p><ul><li><strong>Recurring reset</strong> — reset activity completion, course completion and optionally grades on a schedule.</li><li><strong>Flexible scheduling</strong> — choose a relative rolling anniversary or a fixed calendar schedule.</li><li><strong>Configurable reset depth</strong> — reset just completion, or deeper attempt data, matched to your use case.</li><li><strong>Advance warnings</strong> — send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.</li><li><strong>Full history</strong> — track original completion, every renewal and the certifying body for a per-learner lifecycle report.</li><li><strong>Audit log</strong> — append-only entries record every reset, with GDPR export supported.</li><li><strong>Per-course overrides</strong> — set site defaults, then override behaviour from a course's settings menu.</li></ul><p><strong>Who It Is For</strong></p><ul><li>RTOs and TAFEs delivering training that must be re-certified periodically.</li><li>Employers and compliance teams managing safety-critical or licence-based competencies.</li></ul><p><strong>Requirements And Compatibility</strong></p><ul><li>Moodle 4.4 to 5.x.</li><li>PHP 7.4 or later.</li><li>No AI account or credits required. The plugin makes no external API calls.</li></ul><p><strong>Getting Started</strong></p><p>Install via Site administration &gt; Plugins &gt; Install plugins, then open Site administration &gt; Plugins &gt; Local plugins &gt; Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.</p><p><strong>Documentation And Support</strong></p><p>Full documentation is at <a href=\"https://lms-labs.com/docs/course-recertification\" target=\"_blank\" rel=\"noopener\">lms-labs.com/docs/course-recertification</a>. Support is at <a href=\"mailto:support@lmshostingservices.com\">support@lmshostingservices.com</a>.</p><p><strong>Pricing</strong></p><p>This plugin is available on the Moodle Marketplace for <strong>50 Credits ($5 USD)</strong> (one-off). An LMS Labs account (free) is required to use AI features.</p></div>",
      "releaseVersion": "1.2.1",
      "releaseDate": "Aug 29, 2026",
      "versionNumberNote": "version.php uses the standard 10-digit Moodle format YYYYMMDDXX (e.g. 2026081400). The Marketplace reads the version from version.php inside the uploaded ZIP.",
      "maturity": "Stable",
      "supportedMoodleVersions": [
        "4.4",
        "4.5",
        "5.0",
        "5.1",
        "5.2",
        "5.3"
      ],
      "compatibleRaw": "Moodle™ 4.4 - 5.x",
      "repositoryName": "moodle-local_recertify",
      "repositoryBranch": "main",
      "repositoryTag": "v1.2.1",
      "sourceControlUrl": "https://github.com/lmshostingservices/moodle-local_recertify",
      "bugTrackerUrl": "https://github.com/lmshostingservices/moodle-local_recertify/issues",
      "documentationUrl": "https://lms-labs.com/docs/course-recertification",
      "homepageUrl": "https://lms-labs.com/docs/course-recertification",
      "discussionUrl": "https://lms-labs.com/docs/course-recertification?tab=discussion",
      "zipDownloadUrl": "",
      "license": "GNU GPL v3 or later",
      "licenseUrl": "https://www.gnu.org/licenses/gpl-3.0.html",
      "maintainer": "LMS Hosting Services (LMS Labs)",
      "supportEmail": "support@lmshostingservices.com",
      "tags": [
        "administration",
        "moodle",
        "lms-labs"
      ],
      "pricingModel": "Paid — 50 Credits ($5 USD) (one-off)",
      "priceUsd": 5,
      "marketplacePricingStatus": "priced",
      "marketplacePricingReason": null,
      "creditNote": null,
      "externalServices": "This plugin does not communicate with any external service. All processing occurs within your Moodle installation.",
      "gettingStartedHtml": "<div>\n  <p><strong>Use this plugin on its own — or make the whole suite simpler</strong></p>\n  <p>This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See <a href=\"https://lms-labs.com/pricing\">LMS Labs pricing and AI credits</a> for current plans.</p>\n  <p><strong>Highly recommended when you use more than one LMS Labs plugin:</strong></p>\n  <ul>\n    <li><strong><a href=\"https://lms-labs.com/docs/ai-central-config\">AI Grader Central Config</a> (free)</strong> — enter the Site ID and API key once. Compatible plugins can read the same values, so you do not need to enter them again in every plugin.</li>\n    <li><strong><a href=\"https://lms-labs.com/docs/ai-dashboard-quick-links\">AI Dashboard Quick Links</a> (free)</strong> — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.</li>\n  </ul>\n  <p>Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: <a href=\"https://lms-labs.com/docs/course-recertification\">Course Recertification documentation</a>.</p>\n</div>",
      "marketplacePageHtml": "<div><div><p><strong>Use this plugin on its own — or make the whole suite simpler</strong></p><p>This plugin works by itself. Where it asks for LMS Labs credentials, enter the Site ID and API key assigned to your Moodle site. See <a href=\"https://lms-labs.com/pricing\">LMS Labs pricing and AI credits</a> for current plans.</p><p><strong>Highly recommended when you use more than one LMS Labs plugin:</strong></p><ul><li><strong><a href=\"https://lms-labs.com/docs/ai-central-config\">AI Grader Central Config</a> (free)</strong> — enter the Site ID and API key once. Compatible plugins can read the same values, so you do not need to enter them again in every plugin.</li><li><strong><a href=\"https://lms-labs.com/docs/ai-dashboard-quick-links\">AI Dashboard Quick Links</a> (free)</strong> — one Moodle dashboard for installed plugins, settings, documentation, release checks and controlled updates.</li></ul><p>Both companion plugins are optional. You can keep using this plugin on its own and retain its own settings where available. Full help: <a href=\"https://lms-labs.com/docs/course-recertification\">Course Recertification documentation</a>.</p></div><div><p><strong>Re-Certification That Runs Itself</strong></p><p><em>Keep certifications current automatically. Course Recertification resets activity and course completion (and optionally grades) on a schedule, warns learners before expiry, and logs every reset. For RTOs and safety-critical training.</em></p><p>Local plugin &middot; v1.2.1 &middot; Moodle™ 4.4 - 5.x &middot; Paid — 50 Credits ($5 USD) (one-off)</p><p>Course Recertification automatically resets activity completion, course completion and optionally grades for enrolled learners on a recurring schedule - so they must re-certify every N months. It monitors completion dates against a configurable validity period, sends warning emails as expiry approaches, and re-enrols learners in the refresher course when the deadline passes, all without admin action.</p><p><strong>Why This Beats Manual Tracking</strong></p><p>Moodle has no native way to detect certificate expiry and trigger re-enrolment. Tracking it by hand across hundreds of learners is where compliance quietly fails. Course Recertification watches every completion date, warns learners in advance, resets exactly what you choose, and keeps a full audit log - so nobody works with an expired ticket and you can prove it.</p><p><strong>Key Features</strong></p><ul><li><strong>Recurring reset</strong> — reset activity completion, course completion and optionally grades on a schedule.</li><li><strong>Flexible scheduling</strong> — choose a relative rolling anniversary or a fixed calendar schedule.</li><li><strong>Configurable reset depth</strong> — reset just completion, or deeper attempt data, matched to your use case.</li><li><strong>Advance warnings</strong> — send templated reminder emails at 90, 30, 7 and 1 days before expiry, each with its own urgency messaging.</li><li><strong>Full history</strong> — track original completion, every renewal and the certifying body for a per-learner lifecycle report.</li><li><strong>Audit log</strong> — append-only entries record every reset, with GDPR export supported.</li><li><strong>Per-course overrides</strong> — set site defaults, then override behaviour from a course's settings menu.</li></ul><p><strong>Who It Is For</strong></p><ul><li>RTOs and TAFEs delivering training that must be re-certified periodically.</li><li>Employers and compliance teams managing safety-critical or licence-based competencies.</li></ul><p><strong>Requirements And Compatibility</strong></p><ul><li>Moodle 4.4 to 5.x.</li><li>PHP 7.4 or later.</li><li>No AI account or credits required. The plugin makes no external API calls.</li></ul><p><strong>Getting Started</strong></p><p>Install via Site administration &gt; Plugins &gt; Install plugins, then open Site administration &gt; Plugins &gt; Local plugins &gt; Course Recertification and set your validity period and reset depth. Test the Full data wipe depth on staging before enabling it in production, as it is irreversible.</p><p><strong>Documentation And Support</strong></p><p>Full documentation is at <a href=\"https://lms-labs.com/docs/course-recertification\" target=\"_blank\" rel=\"noopener\">lms-labs.com/docs/course-recertification</a>. Support is at <a href=\"mailto:support@lmshostingservices.com\">support@lmshostingservices.com</a>.</p><p><strong>Pricing</strong></p><p>This plugin is available on the Moodle Marketplace for <strong>50 Credits ($5 USD)</strong> (one-off). An LMS Labs account (free) is required to use AI features.</p></div></div>",
      "versionNotes": "Issues fixed\n\n- No user-facing fixes were documented for this release.",
      "screenshotsNote": "Show meaningful features in use — the main UI, an important workflow, a finished report or dashboard. Must be at least 128 px wide and no more than 480 px wide. Avoid empty states, unreadable detail, and near-duplicate shots.",
      "logoUrl": "/marketplace-logos/recertify.png",
      "logoNote": "1024×1024 PNG, under 200 KB — comfortably above the 200×200 px minimum and under the 10 MB upload limit.",
      "iconNote": "Upload this PNG as the plugin icon. Minimum dimensions 200×200 px — this file is 1024×1024.",
      "websiteUrl": "https://lms-labs.com",
      "priceName": "Standard",
      "priceDescription": "One-off purchase — no subscription. Includes the complete feature set and every future plugin update.",
      "billingType": "One-off purchase",
      "termsOfSaleUrl": "https://lms-labs.com/terms",
      "invoiceNote": "Optional. Turn on 'Enable invoice-based purchasing' only if you want to issue and manage invoices through Stripe Connect — otherwise leave it off.",
      "leadMaintainer": "LMS Hosting Services (support@lmshostingservices.com) — Lead maintainer",
      "contributorsNote": "The lead maintainer edits the plugin page, uploads versions, and manages contributors. Add teammates as Maintainer (can edit and upload versions) or Contributor (credited on the page only)."
    }