Linkwise - Save, annotate, chat with everything you've read. | Product Hunt
Developers

Build on your own library.

Everything the Linkwise apps can do, your scripts can do too. One base URL, one credential, one response shape, across 43 endpoints.
Save a link
export LINKWISE_API="https://jcbgrqawrvztwsvxawda.supabase.co/functions/v1/api"
export LINKWISE_TOKEN="lw_pat_..."

curl -s -X POST "$LINKWISE_API/v1/links" \
  -H "Authorization: Bearer $LINKWISE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article",
    "tags": ["read-later"]
  }'

Get a key

Keys belong to a Linkwise account, so this is the same sign-in you use in the app. The API is open on every plan: the plan sets how fast you may call it, not whether you may.

  1. 1Sign inGoogle or Apple, at /developers/signin.
  2. 2Create a key with the narrowest scopes that workRead only, read and write, or a set you pick by hand. The value is shown once and stored as a hash, so keep it somewhere before you close the dialog.
  3. 3Send it as a bearer tokenAuthorization: Bearer lw_pat_... on every request. That is the whole authentication story.

Free accounts get 20 requests a minute, Pro and Pro + AI get 120. Ten active keys per account.

How it fits together

Three decisions that explain most of what you will run into.

01

One OpenAPI document is the source of truth

The reference on this site, the CLI's commands and the MCP server's tool definitions are all generated from it. A drift check fails the build if the document and the running API disagree, in either direction.

02

Keys are scoped, expiring and independent

Hold one for a script and another for your editor. Revoking either leaves the other working. A key can never mint another key, so one leak stays one leak.

03

Errors are a closed set

Nine codes, each with a fixed status. Branch on the code, never on the message and never on the status alone. Every response carries an x-request-id for when something goes wrong.