octobercms/october · error · ValidationException

License is unpaid or has expired. Please visit octobercms.co

Error message

License is unpaid or has expired. Please visit octobercms.com to obtain a license.

What it means

When attaching a project, October validates the ID against the gateway via UpdateManager::requestProjectDetails($projectId). If the response's is_active flag is falsy (defaults to false when absent), a ValidationException on project_id states the license is unpaid or expired. The gateway will not serve composer packages for that project until the license is active, so attach is refused before storeProjectDetails/ensureComposerRegistered run.

Source

Thrown at modules/system/controllers/Updates.php:253

    /**
     * onAttachProject validates the project ID and execute the project installation
     */
    public function onAttachProject()
    {
        try {
            if (!$projectId = trim(post('project_id'))) {
                throw new ValidationException(['project_id' => Lang::get('system::lang.project.id.missing')]);
            }

            // Validate input with gateway
            $manager = UpdateManager::instance();
            $result = $manager->requestProjectDetails($projectId);

            // Check project status
            $isActive = $result['is_active'] ?? false;
            if (!$isActive) {
                throw new ValidationException(['project_id' => __("License is unpaid or has expired. Please visit octobercms.com to obtain a license.")]);
            }

            // Store project details
            $manager->storeProjectDetails($result);

            // Add gateway as a composer repo
            $this->ensureComposerRegistered();

            Flash::success(__("Thanks for being a customer of October CMS!"));
            return Backend::redirect('system/updates');
        }
        catch (Exception $ex) {
            throw new ValidationException(['project_id' => $ex->getMessage()]);
        }
    }

    /**
     * Make sure composer is ready to receive updates

View on GitHub (pinned to b608633a7e)

Solutions

  1. Log in at octobercms.com, open the account/project page and check the license status; renew or pay if lapsed, then retry attaching
  2. Verify you copied the correct Project ID for this project (not another project's)
  3. If the license clearly shows active, contact October CMS support or check gateway status before retrying
Defensive patterns

Strategy: validation

Validate before calling

$result = \UpdateManager::instance()->requestProjectDetails($projectId);
if (!($result['is_active'] ?? false)) {
    // surface a billing warning and stop before attaching the project
}

Prevention

When it happens

Trigger: onAttachProject with a syntactically valid Project ID whose license is inactive: expired annual license, unpaid invoice, refunded/trial ended, or an ID belonging to a different account.

Common situations: License lapsed mid-project; developer copied the wrong project ID from the account dashboard; purchase not yet provisioned on the gateway.

Related errors


AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21). Data as JSON: /api/errors/cc5acce063b5352c. Report an issue: GitHub.