WidgetStore - Widgets, animated icons, dashboards and personal pages for Notion

Open API v1: call WidgetStore with a personal token

WidgetStore Open API v1 reference. Use a personal API token to update your status, create widgets, add links, cards, to-dos and habits, and read or write My Data.

Everything MCP can do, the Open API can do too, which makes it a good fit for scripts, iOS Shortcuts and automation tools. First create a personal API token in Settings → API & AI connections.

Basics

  • Base URL: https://widgetstore.net/widget/api/v1
  • Auth: header Authorization: Bearer wsp_…
  • Body: JSON (Content-Type: application/json)
  • Dates: YYYY-MM-DD; “today” is based on Beijing time (UTC+8)

Example: update your status

curl -X PUT https://widgetstore.net/widget/api/v1/me/status \
  -H "Authorization: Bearer wsp_…" \
  -H "Content-Type: application/json" \
  -d '{"text":"On vacation in Kyoto, back next week","emoji":"🏖"}'

A successful response:

{
  "code": 0,
  "data": { … },
  "summary": "Status set to \"🏖 On vacation in Kyoto, back next week\" on personal page …",
  "links": { "page": "…" },
  "operationId": "…"
}

summary is a short human-readable description. Endpoints that change something return an operationId you can use to undo.

Endpoints

Method and pathWhat it doesPermission
GET /meOverview of your space: widgets, page, start pages, to-dos, tablesRead
PUT /me/statusUpdate your status: text (≤140 chars), emoji; clear: true clears itStatus
GET /me/widgets?limit=Your widgets, with embed linksRead
POST /me/widgetsCreate a widget: widget (ID or slug), values, title, langWidgets
PATCH /me/widgets/{id}Edit a widget: values (only the fields you send), titleWidgets
POST /me/countdownsCreate a countdown: title, date, mode (countdown / anniversary / countup), repeatWidgets
GET /widget-types?category=&type=&lang=Widget types in the library—
GET /widget-types/search?q=&lang=Search widgets by description, with their fields—
POST /me/startpages/linksAdd a site to a start page: url, name, optional startPage, pageStart pages
POST /me/page/cardsAdd a card to your page: type (link / text / title / widget), url, title, text, size, positionPersonal page
POST /me/focus/todosAdd a to-do: title, due, estimateMinutes, priorityFocus
POST /me/focus/habits/{habit name}/check-inCheck in a habit: date, count, noteFocus
POST /me/focus/sessionsLog focus time: minutes, task, date, modeFocus
GET /me/tablesMy Data: list tablesRead
GET /me/tables/{table name or ID}/records?from=&to=&limit=Look up recordsRead
POST /me/tables/{table name or ID}/recordsAdd a record: values, dateMy Data
POST /me/operations/{operationId}/undoUndo a change—

Search and type listings need no extra permission, but still require a token and count toward your calls. There are no delete endpoints.

Errors

On errors the HTTP status isn't 200 and the body is { "code": status, "msg": "error_code", … }:

StatusCodeMeaning
400invalid_json / invalid_paramsBody isn't JSON, or a field is wrong (see errors)
400blocked_wordsPublic text failed the content safety check
401unauthorized / token_invalid / token_expired / token_revokedMissing, wrong, expired or revoked token
403insufficient_scopeThe token lacks this permission (required names it)
403pro_requiredThis widget needs Pro
404not_found / widget_not_found / table_not_found / start_page_not_found …Not found
409undo_not_allowedCan't undo (reason: already_undone / too_old / newer_change / not_undoable)
429rate_limited / api_daily_limitPer-minute or daily limit reached (retry after retryAfter seconds)
503api_pausedThe API is temporarily paused (maintenance or heavy load)

Limits

Free: 100 calls a day, 30 of them changes, 20 per minute. Pro: 300, 100 and 60. Limits are shared with MCP; see Tokens & activity.

Legacy endpoint

/api/v1/widgets/instances (create, edit and read widget instances) also accepts personal tokens: POST needs the Widgets permission and GET needs Read. These calls are logged and counted the same way. New code should use /me/widgets above.

Last updated: Oct 22, 2026