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
- Purchase the annual subscription (link in the message), then retry.
- If already purchased: refresh or re-login in Settings - Account & Sync - Account.
- Verify account state first via the account API to distinguish logged-out vs unpaid.
- 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
- Check subscription state once at integration startup rather than per call.
- Surface the refresh/re-login hint verbatim - it resolves most 'already paid' reports.
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
- The sidebar feature that comes with the plugin needs to be…
- -2
- Conf.Language(15)
- Content block with id
- 0
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)