Developers

Build with quiklink

Create links and build collections in your account from anywhere — connect an AI assistant like Claude through the Model Context Protocol (MCP), or call the REST API directly. Both use one personal access token, and everything they create is private to you by default.

On this page
  1. 1.What you can build
  2. 2.Get a token
  3. 3.Connect Claude (MCP)
  4. 4.REST API
  5. 5.Limits & privacy

1. What you can build

The quiklink API lets other apps write to your library on your behalf — saving links and assembling them into collections. The original motivation: ask an AI assistant to research a topic and have it build a private collection of the best sources for you.

There are two ways in, both authenticated by the same token:

  • MCP server— connect Claude or any Model Context Protocol client and let it call quiklink's tools in a conversation. Best for AI assistants.
  • REST API — plain HTTPS endpoints under /api/v1. Best for scripts, backends, and integrations.
Everything created through the API is private by default, exactly like a link you save yourself. Nothing becomes public until you explicitly publish a collection from the app.

2. Get a token

Every request is authenticated with a personal access token — a secret that identifies your account. Create one in Settings → API tokens.

  1. 1Open Settings, find API tokens, give the token a name (e.g. “Claude”), and click Create.
  2. 2Copy the token immediately — it starts with qlk_live_ and is shown only once. quiklink stores only a hash, so it can never show it to you again.
  3. 3Send it on every request as a bearer token in the Authorization header. Revoke it anytime from the same screen.
Authorization: Bearer qlk_live_xxxxxxxxxxxxxxxxxxxx
Treat a token like a password: anyone who has it can write to your library. Don't commit it to source control or paste it into shared chats. Lost one? Revoke it and create a new one.

3. Connect Claude (MCP)

quiklink runs a remote Model Context Protocol server with a one-click sign-in (OAuth) — no token to copy. Add it as a custom connector and Claude gains a set of tools for saving links and building collections.

  1. 1In Claude, go to Settings → Connectors → Add custom connector and paste this server URL:
https://quiklink.ai/api/mcp

Leave “Advanced settings” blank.quiklink registers Claude automatically — don't enter an OAuth Client ID or Client Secret. Putting your email or a token in those fields overrides auto-registration and causes an “app isn't recognized” error.

  1. 2Claude opens a quiklink page — sign in and click Authorize. That connects Claude to your account; you can revoke it anytime under Settings → API tokens.
  2. 3Start a chat and ask, for example: “Research the best introductions to post-quantum cryptography and save them to a new private collection.” Claude calls the tools below to get it done.

Prefer a bearer token (for scripts or non-OAuth MCP clients)? Use the Authorization: Bearer qlk_live_… token from above instead.

Tools Claude gets

  • list_collections — see your collections, link counts, and public URLs.
  • create_collection — start a new (private) collection.
  • get_collection— read a collection's links (to dedupe, resume, or verify a bulk add).
  • create_link — save one URL with an optional note, tags, and target collection.
  • add_links_to_collection — save many links at once, each with its own note and tags — build a whole collection in one call.
  • update_link— change a saved link's note, tags, or collection.
  • search_my_links — search your library, filterable by tags and collection.
  • list_tags — see your existing tags and usage counts.
  • merge_tags— merge duplicate/variant tags into one (e.g. “benchmarks” into “benchmarking”) to clean up your vocabulary.
  • delete_tags — remove junk tags from every link (without deleting the links).
  • update_collection— change a collection's title, description, or visibility.
  • remove_from_collection — take a link out of a collection (keeps it in your library).
  • delete_link — permanently delete a link.
Saved links are enriched in the background just like the app: quiklink fetches the title, description, and preview image, then runs an AI summary and suggested tags.

4. REST API

Prefer to call it yourself? Every endpoint lives under https://quiklink.ai/api/v1, takes and returns JSON, and needs the Authorization: Bearerheader. Here's the “research → collection” flow end to end:

# 1. Create a private collection
curl -X POST https://quiklink.ai/api/v1/collections \
  -H "Authorization: Bearer qlk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"Post-Quantum Cryptography"}'
# → 201 { "collection": { "id": "…", "slug": "…", "visibility": "private" } }

# 2. Add several links to it in one call
curl -X POST https://quiklink.ai/api/v1/links/batch \
  -H "Authorization: Bearer qlk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "collectionId": "…",
    "urls": [
      "https://example.com/nist-pqc",
      "https://example.com/pqxdh"
    ]
  }'
# → 201 { "created": 2, "failed": 0, "results": [ … ] }

Endpoints

POST/api/v1/links

Save one link. Body: { url, note?, collectionId? }. Returns 201 { link }. If collectionId is given it must be one of yours (else 404).

POST/api/v1/links/batch

Save up to 50 links at once. Body: { urls[], collectionId? , newCollection? }. Pass newCollection (e.g. { title }) to create a collection and fill it in one call. Invalid URLs are skipped and reported per item; returns { collection, created, failed, results }.

GET/api/v1/links?q=&limit=

Search your links by URL, title, or description. Omit q for your most recent links. Returns { links }.

PATCH/api/v1/links/:id

Edit a saved link. Body: { status?, note?, tags?, collectionId? }. status is one of inbox, kept, or archived (triage); tags replaces the existing set. Returns { link }.

DELETE/api/v1/links/:id

Permanently delete a link and remove it from every collection. Returns 204.

POST/api/v1/collections

Create a collection. Body: { title, description?, visibility? }. Defaults to private. Returns 201 { collection }.

GET/api/v1/collections

List your collections with link counts. Returns { collections }.

POST/api/v1/collections/:id/links

Add an existing link to a collection. Body: { linkId }. Both must belong to you.

PATCH/api/v1/collections/:id

Rename or edit a collection. Body: { title?, description?, visibility? }. Returns { collection } with the updated row and link count. (Publishing stays a separate step in the app.)

DELETE/api/v1/collections/:id

Delete a collection and its editions. The links themselves stay in your library. Returns 204.

5. Limits & privacy

  • Private by default. Links and collections created via the API are owner-only. A collection goes public only when you publish it from the app. Row-level security means a token can only ever touch its owner's data.
  • Rate limit. Each token is limited to 100 requests per minute. Over the limit, requests get a 429 with a Retry-Afterheader — wait that many seconds and retry. Limits are per token, so one token's traffic never throttles another.
  • Batch cap. /api/v1/links/batch accepts up to 50 URLs per request — split larger sets into multiple calls.
  • Background enrichment. Endpoints return as soon as the link row is created; metadata and AI summaries fill in afterward, and count toward your monthly enrichment quota (add your own AI key in Settings to bypass the cap).
  • Revoke anytime. Deleting a token in Settings takes effect immediately — the next request with it gets a 401.