siyuan-note/siyuan · warning

This feature requires the purchase of an <a target='_blank'…

Error message

This feature requires the purchase of an <a target='_blank' href='${accountServer}/subscribe/siyuan'>[Annual Subscription]</a> (if you have already purchased, please refresh or re-login in [Settings - Account & Sync - Account])

What it means

kernel/model/blockial.go:45, from SetCloudReminder: the caller is not an active subscriber (IsSubscriber() false) on a non-iOS container, so the kernel returns language key 29: the 'This feature requires the purchase of an [Annual Subscription]' message pointing at ${accountServer}/subscribe/siyuan, with the hint to refresh or re-login in Settings - Account & Sync - Account if already purchased. It is an entitlement rejection, not a malfunction - the operation is simply not performed.

Solutions

  1. Purchase the annual subscription (link in the message), then retry.
  2. If already purchased: refresh or re-login in Settings - Account & Sync - Account.
  3. Verify account state first via the account API to distinguish logged-out vs unpaid.
  4. Use purely local features if you do not intend to subscribe.
Defensive patterns

Strategy: try-catch

Validate before calling

// Optional pre-flight: confirm subscription before calling paid endpoints
const acc = await (await fetch("/api/account", { method: "POST" })).json();
const sub = acc.data?.user?.siyuanProSubscription ?? {};
if (!sub.valid?.(sub.oneTimePayStatus) && !(acc.data?.user?.siyuanProSubscription)) {
  promptPurchase();
}

Try / catch

try {
  await setCloudReminder(id, content, timed);
} catch (e) {
  if (/Annual Subscription/.test(e.message)) { promptPurchase(); return; }
  throw e;
}

Prevention

When it happens

Trigger: Calling the cloud reminder endpoint from desktop/browser/mobile-web containers while the logged-in account has no active subscription; expired subscription; account logged out but stale client state.

Common situations: Free-account users trying cloud reminders (WeChat reminders); subscription lapsed after renewal failure; token state stale after purchasing in another client.

Related errors


AI-assisted analysis of siyuan-note/siyuan@afa823b6b4 (2026-08-18). Data as JSON: /api/errors/020bae8e16e47c29. Report an issue: GitHub.

Appendix: source

Thrown at kernel/model/blockial.go:45

	"github.com/88250/lute/ast"
	"github.com/88250/lute/editor"
	"github.com/88250/lute/html"
	"github.com/88250/lute/parse"
	"github.com/araddon/dateparse"
	"github.com/siyuan-note/siyuan/kernel/av"
	"github.com/siyuan-note/siyuan/kernel/cache"
	"github.com/siyuan-note/siyuan/kernel/filesys"
	"github.com/siyuan-note/siyuan/kernel/sql"
	"github.com/siyuan-note/siyuan/kernel/treenode"
	"github.com/siyuan-note/siyuan/kernel/util"
)

func SetCloudReminder(id, content, timed string) (err error) {
	if !IsSubscriber() {
		if "ios" == util.Container {
			return errors.New(Conf.Language(122))
		}
		return errors.New(Conf.Language(29))
	}

	var timedMills int64
	if "0" != timed {
		t, e := dateparse.ParseIn(timed, time.Now().Location())
		if nil != e {
			return e
		}
		timedMills = t.UnixMilli()
	}

	content = strings.TrimSpace(content)
	err = SetCloudBlockReminder(id, content, timedMills)
	if err != nil {
		return
	}

	if "0" == timed {

View on GitHub (pinned to afa823b6b4)