theonedev/onedev · error · NotAcceptableException
An active subscription is required for this feature
Error message
An active subscription is required for this feature
What it means
Setting "ownEstimatedTime" via editIssue requires an active OneDev subscription; without one, NotAcceptableException("An active subscription is required for this feature") is thrown. Time-tracking/scheduling fields are a commercial feature gated by subscription state.
Source
Thrown at server-core/src/main/java/io/onedev/server/ai/TodResource.java:624
}
if (data.containsKey("description")) {
if (!SecurityUtils.canModifyIssue(subject, issue))
throw new UnauthorizedException("No permission to update issue description");
issueChangeService.changeDescription(user, issue, (String) data.remove("description"));
}
var confidential = (Boolean) data.remove("confidential");
if (confidential != null) {
if (!SecurityUtils.canModifyIssue(subject, issue))
throw new UnauthorizedException("No permission to update issue confidential");
issueChangeService.changeConfidential(user, issue, confidential);
}
Integer ownEstimatedTime = (Integer) data.remove("ownEstimatedTime");
if (ownEstimatedTime != null) {
if (!subscriptionService.isSubscriptionActive())
throw new NotAcceptableException("An active subscription is required for this feature");
if (!issue.getProject().isTimeTracking())
throw new NotAcceptableException("Time tracking needs to be enabled for the project");
if (!SecurityUtils.canScheduleIssues(subject, issue.getProject()))
throw new UnauthorizedException("Issue schedule permission required to set own estimated time");
issueChangeService.changeOwnEstimatedTime(user, issue, ownEstimatedTime*60);
}
@SuppressWarnings("unchecked")
List<String> iterationNames = (List<String>) data.remove("iterations");
if (iterationNames != null) {
if (!SecurityUtils.canScheduleIssues(subject, issue.getProject()))
throw new UnauthorizedException("Issue schedule permission required to set iterations");
var iterations = new ArrayList<Iteration>();
for (var iterationName : iterationNames) {
var iteration = iterationService.findInHierarchy(issue.getProject(), iterationName);
if (iteration == null)
throw new NotFoundException("Iteration '" + iterationName + "' not found");
iterations.add(iteration);View on GitHub (pinned to d44925c47c)
Solutions
- Remove "ownEstimatedTime" from the payload if the feature isn't licensed.
- Purchase/renew a OneDev subscription and upload the license under Administration > License.
- Verify the license file is present and valid (check Administration for subscription status).
- Use alternative free mechanisms (e.g. custom fields) to track estimates if staying on community edition.
Example fix
// before
editIssue(project, ref, {ownEstimatedTime: 8}) // 406 no subscription
// after
editIssue(project, ref, {}) // or activate subscription first Defensive patterns
Strategy: validation
Validate before calling
// avoid gated fields unless subscription is known active
const isLicensed = await getServerSubscriptionStatus(); // e.g. via admin API / license info
if ('ownEstimatedTime' in payload && !isLicensed) {
delete payload.ownEstimatedTime;
console.warn('ownEstimatedTime requires an active OneDev subscription');
} Try / catch
try { await editIssue(project, ref, {ownEstimatedTime}); } catch (e) { if (e.status === 406 && /subscription/i.test(e.message)) { fallbackToCustomField(); } else throw e; } Prevention
- Check Administration > License for active subscription before using gated fields
- Track license expiry in ops monitoring for self-hosted instances
- Design integrations to degrade to non-gated fields on community edition
- Renew/upload the license before rolling out time-tracking automation
When it happens
Trigger: Including "ownEstimatedTime" (integer hours) in the edit-issue data map while subscriptionService.isSubscriptionActive() returns false (no license, expired subscription, or community edition).
Common situations: Running OneDev community edition while AI tooling tries to set time estimates; subscription expired and license not renewed; on-prem instance without license upload.
Related errors
- An active subscription is required for this feature
- This feature requires an active subscription
- Time tracking needs to be enabled for the project
- An active subscription is required for this feature
- This operation requires active subscription
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/af868a07bcb1675c.
Report an issue: GitHub.