Cautesay: caught
AppsHow it findsYour AIPricingHelpDevelopersSign inStart free

For developers

  • Overview
  • The API
  • MCP
  • Build a capture surface
  • Build a processor
  • Processors you can use
  • Recommended keys
  • Webhooks
  • The command line
  • Coding agents
  • The card format
  • Numbers
  • Caute's fetcher

The API

Caute's API is the one its own web app, iPhone app and browser extension use. It lives at https://api.getcaute.com/v1, speaks JSON, and is described in full by an OpenAPI document, openapi.json, from which the reference below is built. Generated clients for TypeScript and Swift come from the same document.

Signing in

Every request carries a bearer token: Authorization: Bearer <token>.

  • A personal token, for your own scripts and tools. Make one in Caute under Settings → Apps and tokens, choosing its scopes and spaces. Its secret is shown once.
  • OAuth, for an app other people use. Caute is its own authorization server, OAuth 2.1 with PKCE (S256) and no client secret. Discover it at https://api.getcaute.com/.well-known/oauth-protected-resource, which names the authorization server and its metadata. Identify your app with a Client ID Metadata Document: your client_id is an HTTPS address serving your app's name, logo and redirect addresses. Send the resource parameter, https://api.getcaute.com, on the authorization and token requests; a token is good only for the resource it was issued for. The person chooses scopes and spaces on Caute's consent screen, and can revoke the connection at any time, which takes effect at once.

Access tokens are short-lived; refresh tokens rotate on every use, and using an old one revokes the connection, so refresh from one place at a time.

Scopes

Scope Lets the credential
items:write Save new things. Most capture surfaces need nothing else.
items:read Read cards, their text, notes and highlights.
search Search, ask questions of the library, and find related cards.
notes:write Write new notes, and add to the end of existing ones.
notes:edit Change existing notes. Caute keeps a copy of each version first.
tags:write Apply tags directly, instead of suggesting them.
links:write Link cards directly, instead of suggesting links.
properties:write Set properties directly, instead of suggesting them.

Ask for the fewest you need. A connection that can both search and write broadly is warned about on the consent screen, because content it reads could try to steer what it writes.

Conventions

  • Errors are problem details: JSON with status, title, detail and a stable code. Act on the code; show the detail, which is written for people.
  • Lists are paged with a cursor: pass back the next_cursor a page gives until there isn't one.
  • Saving is safe to retry. Send an Idempotency-Key header with every save; the same key never saves twice.
  • Saving returns at once with 202 Accepted. Reading the thing saved, finding its words and making it searchable happen afterwards; a card's status says how far along it is.
  • Limits are per credential and per account. A request over one is answered 429 with Retry-After and RateLimit headers. Something over the person's plan is 402 or 429 with the code quota_exceeded.
  • Times are RFC 3339 in UTC. Ids are UUIDs and never reused: a card's link, https://app.getcaute.com/c/<id>, is permanent.
  • Card links can point inside a card: #page=4, #t=754 (seconds into a recording) and #char=120-360 (a range of the card's text, counted in Unicode code points), joined with &.

Calling from a browser

The API answers browsers only for a few named companion apps, and never with cookies. Call it from your own server, a native app or a command line, where none of that applies.

Search and gather

POST /v1/search finds cards by words and by meaning, one result per card with the passage that matched, its anchor in the original, and provenance. Filters narrow it: tags, kinds, dates, confirmed properties, and marked_only, the cards the person highlighted or wrote a note on. A passage the person marked says so (match.marked) and comes first.

POST /v1/gather is for an assistant with a task rather than a question: one call returns the best passages within a token budget (2,000 by default), grouped by card, near-duplicates removed, each with its title, address, anchor and date, the card's confirmed properties before its passages, and the person's own highlights flagged and first. It takes the same filters, and with_memories puts what your assistants remembered about you on the task first, flagged memory, within a third of the budget. No model reads anything, and everything in the pack is labelled as untrusted data from the person's library.

Memory

POST /v1/memories remembers something about the person: a note in their private inbox tagged memory/<app> with a confirmed assistant property naming the app, read from the credential itself, never from the request. GET /v1/memories lists them with who wrote each and the card it was learned from. filters.memory_only on search and gather keeps to memory notes, and a property filter on assistant keeps to one app's. A pack's as_of gives, for each confirmed value, the date it is true as of: the card's as_of property, the latest across the card's versions, else the day the value was confirmed.

Stability

Everything under /v1 is kept: fields and endpoints are never removed or given a new meaning. New fields, new endpoints and new values in a list of choices can appear at any time, so ignore what you don't recognise. A change that can't be made that way would be a /v2, announced well ahead.

Reference

Every operation, by area. openapi.json has each one's parameters, request and answers in full.

Account

  • DELETE /v1/me Delete Account. Delete your account.
  • GET /v1/me Get Me. The caller's identity and the credential in use. A service token has no user.
  • GET /v1/me/preferences Get Preferences. Your preferences for how Caute's apps show things.
  • PATCH /v1/me/preferences Update Preferences. Change your preferences. Fields left out keep their value.

Auth

  • POST /auth/logout Logout
  • POST /auth/magic-link Request Magic Link. Email a single-use sign-in link. Creates the account on first use.
  • POST /auth/magic-link/verify Verify Magic Link. Exchange a magic-link token for a session cookie.
  • POST /auth/passkeys/login/options Passkey Login Options. Start signing in with a passkey. Passkeys are discoverable, so no email is needed and none is revealed.
  • POST /auth/passkeys/login/verify Passkey Login Verify
  • POST /auth/passkeys/register/options Passkey Register Options. Start adding a passkey to the signed-in account.
  • POST /auth/passkeys/register/verify Passkey Register Verify
  • POST /auth/sso/start Sso Start. Start signing in through the company's provider for this address's domain.

Briefs

  • POST /v1/briefs Create Brief. Write a brief: a cited synthesis over a tag, a saved search, some cards or a question, saved as a note in your private inbox. Every sentence links the card it came from, and only cards you can read are used.

Checkpoints

  • GET /v1/checkpoints List Checkpoints. Where each of your tasks got to: the latest checkpoint per task, newest first, each with the prompt to paste into another assistant. Needs items:read.
  • POST /v1/checkpoints Checkpoint. Save where a task got to: a note with six parts in your inbox, a new version of the task's last checkpoint when there is one. Needs notes:write.
  • POST /v1/checkpoints/resume Resume. What the next assistant is handed: the latest checkpoint for the task, its parts, and the best passages of the card the work lives in, within the budget; with no task, the newest few. Everything is labelled as untrusted data. Needs search.

Companion

  • POST /v1/items/preview:batch Item Previews. Previews for up to 100 items, in the order asked. Inaccessible or deleted ids come back as "unavailable", indistinguishable from ids that never existed.
  • PUT /v1/items/{item_id}/external-refs Put External Ref. Record, at the user's request, that this card is referenced from a companion app. Only the opaque pointer is stored.
  • DELETE /v1/items/{item_id}/external-refs/{ref_id} Delete External Ref
  • GET /v1/items/{item_id}/preview Item Preview. A small, cacheable payload for a reference chip. Supports If-None-Match.

Decisions

  • GET /v1/decisions List Decisions. The decisions in the spaces you can read, superseded ones included, newest first: what the team agreed, with who agreed each and when, what is proposed and waits, and what was superseded. Needs items:read.
  • POST /v1/decisions Propose Decision. Propose a decision to the team: a note in the shared space, marked proposed, written as whoever proposed it. The people the team's owner named agree it; an app never does. With from_item_id, the words of a private note or memory are copied and the original stays yours ("Propose to the team"). Needs notes:write.
  • DELETE /v1/decisions/{note_id}/agree Withdraw Agreement. Take back your agreement while the decision still waits for others.
  • POST /v1/decisions/{note_id}/agree Agree Decision. Agree a proposed decision, as yourself. Under the space's rule it is agreed now, with today's date and your name, or waits for the other approvers. Agreeing twice is agreeing once. Only you, in Caute itself.
  • GET /v1/spaces/{space_id}/decisions Space Decisions. Who agrees decisions in this space: any member, or the approvers the owner named (N12).
  • PUT /v1/spaces/{space_id}/decisions Set Space Decisions. The owner names who agrees decisions here: any member of the space, or approvers, any one of them or all of them. Changing it never un-agrees a past decision. The owner alone, signed in.

Email

  • GET /v1/email-addresses List Addresses
  • POST /v1/email-addresses Create Address
  • DELETE /v1/email-addresses/{address_id} Revoke Address
  • POST /v1/email-addresses/{address_id}/rotate Rotate Address. Issue a new address and retire the old one. Mail to the old address stops being accepted immediately.
  • POST /v1/items/{item_id}/release Release Item. Let a quarantined message through.
  • GET /v1/verified-senders List Senders
  • POST /v1/verified-senders Verify Sender. Vouch for a sender, so their mail is ingested instead of quarantined.
  • DELETE /v1/verified-senders/{address} Unverify Sender

Entities

  • GET /v1/entities List Entities. Who and what your cards mention, most mentioned first. Counts are of cards you can read.
  • GET /v1/entities/{kind}/{key} Get Entity. One person, organisation, place or date, as your cards mention it.
  • GET /v1/entities/{kind}/{key}/items Entity Items. The cards you can read that mention it, newest first.

Events

  • GET /v1/events Events. A stream of events for spaces you can read: item.captured, item.searchable, item.failed, item.deleted, and more over time.

Exports

  • GET /v1/exports List Exports. Your recent exports, newest first.
  • POST /v1/exports Start Export. Start an export of everything you can read in a workspace.
  • GET /v1/exports/{export_id} Get Export

Feeds

  • GET /v1/feed List Feed. Your Feed, newest first.
  • POST /v1/feed/dismiss Dismiss Entries. Dismiss several unread entries at once: these, one subscription's, one folder's, or all.
  • PATCH /v1/feed/{entry_id} Update Entry. Dismiss an entry, or bring it back to unread. A waiting newsletter issue can be dismissed without letting its sender through; it comes back to unread only by being let through.
  • POST /v1/feed/{entry_id}/keep Keep Entry. Keep an entry: it becomes a card in your library, through the same path as anything you catch, and goes to Later unless you turned that off.
  • GET /v1/feed/{entry_id}/page Entry Page. A newsletter issue's page, as the worker sanitized it, on the untrusted-content host. Not for an issue still waiting.
  • POST /v1/feed/{entry_id}/release Release Entry. Let a waiting newsletter issue through. The first issue from a sender is how you approve them: their other waiting issues come through with it, and later ones arrive on their own. An issue that failed the sender checks comes through alone.
  • GET /v1/subscriptions List Subscriptions. Everything you follow, waiting senders first, then by name.
  • POST /v1/subscriptions Create Subscription. Follow a feed. It is checked at once and then about every hour; following one you already follow returns it unchanged.
  • GET /v1/subscriptions/folders List Folders. The folders you put subscriptions in, by name, with how many are in each and how much waits to be read.
  • DELETE /v1/subscriptions/folders/{name} Delete Folder. Remove a folder. What was in it stays followed, in no folder.
  • PATCH /v1/subscriptions/folders/{name} Rename Folder. Rename a folder. Renaming it to a folder you already have puts everything in that one.
  • GET /v1/subscriptions/opml Export Opml. Your feeds as OPML, for any other feed reader. To bring feeds in from one, import its OPML file with POST /v1/imports and source: opml.
  • DELETE /v1/subscriptions/{subscription_id} Delete Subscription. Unfollow. Its entries leave the Feed; what you kept stays.
  • PATCH /v1/subscriptions/{subscription_id} Update Subscription
  • POST /v1/subscriptions/{subscription_id}/refresh Refresh Subscription. Check a feed now rather than at its next turn.

Imports

  • GET /v1/imports List Imports. Your imports, newest first.
  • POST /v1/imports Start Import. Import another tool's export into Caute.
  • GET /v1/imports/{import_id}/links-only Links Only. The pages an import couldn't load, kept as links.

Items

  • GET /v1/attention Attention. Items that failed or are quarantined, each with a reason.
  • GET /v1/items List Items. The timeline: newest first. Embedded assets and superseded versions are hidden.
  • POST /v1/items Create Item. Capture anything. Returns at once; processing happens in the background.
  • POST /v1/items/move:batch Move Items. Move a working set into a space, which is how a tag page shares one. A tag is what something is about and never who can see it, so widening the audience is this separate, deliberate act.
  • GET /v1/items/version-candidates Version Candidates. File cards a file may be a new version of, so a client can ask before it saves one: current, in a space you can write, with the same extension and the same name once words like "v2", "final" or a date are left out. Up to five, newest first. Nothing is joined until the person chooses, with version_of or POST /v1/items/{item_id}/earlier-version.
  • DELETE /v1/items/{item_id} Delete Item. Delete an item for good. Derived data, links, tags, highlights and jobs go with it, and the stored original is removed.
  • GET /v1/items/{item_id} Get Item. The card: metadata, provenance, privacy state, tags, and processing status.
  • PATCH /v1/items/{item_id} Update Item. Edit the title, or move it to another space.
  • POST /v1/items/{item_id}/capture-record/check Check Capture Record. Whether the copy kept here is the one caught: the stored original's SHA-256, taken now, against the one recorded when it was caught.
  • POST /v1/items/{item_id}/citations/keep Keep Citations. Keep the pages a conversation's answers cited: each an ordinary URL capture as you, into the conversation's space, a page already there linked rather than caught again, and a cites link from the conversation to each. Returns at once; the pages are fetched in the background. One that can't be kept is skipped with its reason and the rest are kept.
  • POST /v1/items/{item_id}/copy Copy Item. The same content in another space, as its own item. What anyone wrote about it — notes, links, tags — stays with the original.
  • POST /v1/items/{item_id}/earlier-version Earlier Version. Join a card already saved into this card's history, as an earlier version, for two saves of one thing that were caught as two cards. Its notes, tags, links and decided properties move to this card, and it leaves the timeline and search but stays in the version history. Both must be the newest of their versions, in the same space, and the same kind of thing (any two files count). The person's choice alone.
  • POST /v1/items/{item_id}/move Move Item. Move it, and what arrived with it if you say so. Sharing is always an act someone takes; this is that act.
  • GET /v1/items/{item_id}/move-check Move Check. What moving this there would mean: what came with it, and what would stop opening for the people who would then see it.
  • PUT /v1/items/{item_id}/reading Set Reading. Put it in your reading queue (later), mark it read (archived), take it out (none), or record how far you have read. Yours alone. Needs items:write, or Caute's own apps.
  • GET /v1/items/{item_id}/rendition Get Rendition. A short-lived link that renders the original on the untrusted-content host: a PDF viewer (of the file itself, or of the rendition made of it), a sanitized archived page, an image or player, or a download.
  • POST /v1/items/{item_id}/reprocess Reprocess Item. Run the pipeline again from the start. Regenerates derived data only; your titles, notes, links, and tags are untouched.
  • DELETE /v1/items/{item_id}/text Revert Item Text. Take a correction away, so the card shows what was captured again.
  • GET /v1/items/{item_id}/text Get Item Text. The text Caute extracted from the item, with page ranges, for reader views and anchors. Shown as text, never as markup.
  • PUT /v1/items/{item_id}/text Edit Item Text. Correct the text Caute captured. The original stays as it was; this is your text in place of what was read from it, which the reader, search and Ask use from then on and reprocessing never replaces. Marked passages move with their words. Not for notes, which have their own editor, or transcripts, whose words are timed.
  • GET /v1/stats Stats. A short summary of what you have caught lately, for the home screen.
  • GET /v1/stats/timeline Timeline Stats. Counts for the timeline's tabs, its "Jump to" column and its day heads.
  • POST /v1/uploads Create Upload. Get a presigned URL for a large file. PUT the bytes there, then call POST /v1/items with the upload_id. The API never proxies large bodies.

Links

  • GET /v1/graph Collection Graph. Every card you can read, and how they connect. A card connected to nothing is still a card: it is shown on its own until something links to it or something close arrives.
  • GET /v1/items/{item_id}/graph Card Graph. One card, what it is linked to, and what it resembles. The related edges are exactly the suggestions on its Links tab.
  • GET /v1/items/{item_id}/links Item Links
  • POST /v1/links Create Link. Link two cards by hand. Both ends must be ones the caller can see, and the row policy is what enforces that.
  • POST /v1/links/feedback Link Feedback. Pin a suggestion, which makes it a real link, or dismiss it so it stops being offered.
  • DELETE /v1/links/{link_id} Delete Link
  • POST /v1/related Related. Cards close in meaning to a piece of text.

Memory

  • GET /v1/memories List Memories. What your assistants remember about you, each with the app that wrote it and, when it learned it from a card, that card. Needs items:read.
  • POST /v1/memories Remember. Remember something about the person: a note in their private inbox tagged memory/<app> with a confirmed assistant property naming the app, read back by every connected assistant through recall and by POST /v1/gather with memory_only. With kind = lesson and applies_to, a lesson: how the person wants that kind of work done, kept as written when it is theirs and waiting on the Memory page when an assistant's. Needs notes:write; facts in about need items:write too.
  • POST /v1/memories/forget Forget All. Forget everything one assistant remembered: each memory erased, its deleted mark kept so the phone and the folder drop it. Yours alone, in Caute itself. The assistant's own copy, in its own settings, is the assistant's to clear.
  • POST /v1/memories/import Import Memories. Bring what an assistant remembers: paste what it wrote out and each line becomes a memory under its name, with caught_from = import. The same words pasted again add nothing. Yours alone, in Caute itself.
  • GET /v1/memories/new New Memories. How many memories, lessons and checkpoints an assistant wrote since you last opened Memory: written by an app, not by you, not replaced. For the top bar's count and the page's "New since you last looked".
  • POST /v1/memories/seen Memories Seen. You opened Memory: what is new is counted from now.
  • POST /v1/memories/try Try Lessons. Try it on a task: which lessons an assistant asking for memories at the start of this task would be carried, and which left out and why. The same gather a recall runs; no assistant reads anything. Needs search.
  • POST /v1/memories/{note_id}/keep Keep Lesson. Keep a lesson an assistant suggested: from now on recall and gather with memories carry it for a task that matches its scope. Yours alone, in Caute itself; a kept lesson stays kept.
  • POST /v1/memories/{note_id}/replaces Replace Memories. Keep this one: mark other memories replaced by this one. Each is kept, struck through on the Memory page with who did it and when, and no longer returned by recall or gather; restoring undoes it. Any memory you can read and write, whichever assistant wrote it. Needs notes:write.
  • POST /v1/memories/{note_id}/restore Restore Memory. Undo a replacement: the memory is current again and returned to every assistant as before. Yours alone, in Caute itself.

Notes

  • GET /v1/highlights List Highlights. Every passage you have marked, newest first, across every card.
  • GET /v1/notes List Notes. Notes newest-edited first, pinned ones at the top.
  • POST /v1/notes Create Note
  • GET /v1/notes/counts Note Counts. How many notes and highlights there are, counted the way their lists are, over what you can read.
  • GET /v1/notes/sync Sync Notes. Everything an offline client missed: notes changed since since, and the ids of notes that are no longer there.
  • DELETE /v1/notes/{note_id} Delete Note
  • GET /v1/notes/{note_id} Get Note
  • PATCH /v1/notes/{note_id} Patch Note
  • PUT /v1/notes/{note_id} Save Note
  • POST /v1/notes/{note_id}/append Append To Note. Add to the end without needing a revision. It cannot conflict, so it is the one body change the server makes on its own.
  • POST /v1/notes/{note_id}/editing Editing. Say that this note is open here, and hear who else has it open.
  • POST /v1/notes/{note_id}/restore Restore Note. Put an earlier body back. The current one is kept first, so this is itself undoable.
  • GET /v1/notes/{note_id}/versions List Versions. History, newest first. Who wrote each one is said in terms the reader can act on, and an agent's work is always marked as such.

Properties

  • DELETE /v1/items/{item_id}/properties/{key} Delete Property
  • PUT /v1/items/{item_id}/properties/{key} Set Property. Set a property. From an agent without properties:write it is a suggestion, which never replaces a value you set and is never made again once you dismissed it.
  • POST /v1/items/{item_id}/properties/{key}/confirm Confirm Property. Make a suggestion yours: it now counts in filters and exports.
  • POST /v1/items/{item_id}/properties/{key}/dismiss Dismiss Property. Turn a suggestion down. It is not suggested for this card again.
  • GET /v1/properties Property Keys. The property names on cards you can read, most used first, for a filter to offer.

Search

  • POST /v1/gather Gather. A compact context pack for a task: the best passages from what you can read, grouped by card, near-duplicates removed, each with its title, address, anchor and date; the card's confirmed properties first; your own highlights and notes flagged and put first. No model reads anything. Everything in it is labelled as untrusted data.
  • DELETE /v1/questions Forget Questions. Forget every question you've asked, on every device.
  • GET /v1/questions List Questions. The questions you've asked, newest first, on every device. Yours alone.
  • DELETE /v1/questions/{question_id} Delete Question. Forget one question, everywhere.
  • GET /v1/questions/{question_id} Get Question. One question with its answer and the results it cites, as they can be shown now: a card you can no longer open is dropped, and so is anything the answer said only on its word.
  • PUT /v1/questions/{question_id} Put Question. Keep a question you asked, with its answer, or replace it after asking again. The id is the client's, so a phone can keep one before it is sent. Only the newest 200 are kept.
  • POST /v1/search Search. Keyword and semantic search across every space you can read, in one query. Results explain themselves: passage, anchor, provenance, privacy.
  • DELETE /v1/search/opens Forget Search History. Forget all of it. Nothing else changes; ranking simply loses the signal.
  • GET /v1/search/opens Search History. What Caute has recorded about your searching. Yours alone to see.
  • POST /v1/search/opens Record Open. Record that a result was opened, for ranking.

Support

  • GET /v1/support/requests List Requests. Your conversations with Caute's staff, newest first.
  • POST /v1/support/requests Create Request. Ask Caute's staff something. They're emailed, and their answer comes by email and here. What you write goes to people at Axionary Labs, with your account's email and the page you sent it from.
  • GET /v1/support/requests/{request_id} Get Request
  • POST /v1/support/requests/{request_id}/close Close. Say it's sorted. Writing again opens it.
  • POST /v1/support/requests/{request_id}/messages Reply. Add to a conversation. A closed one opens again.

Tags

  • POST /v1/items/tags:batch Batch Tags. Add and remove tags on many items at once, such as from a tag page.
  • DELETE /v1/items/{item_id}/tags/{tag_id} Remove Tag
  • PUT /v1/items/{item_id}/tags/{tag_id} Apply Tag. Apply a tag, or confirm a suggested one. Tokens without tags:write only suggest.
  • POST /v1/items/{item_id}/tags/{tag_id}/dismiss Dismiss Tag. Dismiss a suggestion. It is remembered and never proposed again for this item.
  • GET /v1/saved-searches List Saved Searches
  • POST /v1/saved-searches Create Saved Search
  • DELETE /v1/saved-searches/{search_id} Delete Saved Search
  • PATCH /v1/saved-searches/{search_id} Update Saved Search
  • GET /v1/tag-proposals List Proposals. New tags Caute proposes for groups of your untagged cards, best first. Nothing is tagged until you accept one.
  • POST /v1/tag-proposals/look Look. Look for new tags now, and then every week. Follow it at GET /v1/tasks/{id}.
  • POST /v1/tag-proposals/{proposal_id}/accept Accept. Make the tag (a personal one, or yours already with that path) and tag the cards you kept. Renaming it here is fine.
  • POST /v1/tag-proposals/{proposal_id}/dismiss Dismiss. Not this one. Caute won't propose it, or mostly the same cards, again.
  • GET /v1/tags List Tags. Tags you can see, with counts of items you can read.
  • POST /v1/tags Create Tag Endpoint
  • DELETE /v1/tags/{tag_id} Archive Tag. Archive a tag and its descendants. Assignments are kept but stop affecting filters and tag pages.
  • GET /v1/tags/{tag_id} Get Tag Endpoint. One tag you can see, with the count of its items you can read. A tag page asks for its own tag, rather than finding it in a page of the list.
  • PATCH /v1/tags/{tag_id} Update Tag
  • POST /v1/tags/{tag_id}/delete Delete Tag. Delete a tag and the tags under it for good, taking it off every card that carries it, suggestions included. Archiving keeps the assignments; this doesn't. The cards themselves are untouched.
  • GET /v1/tags/{tag_id}/items Tag Items. The tag page: confirmed items you can read, including descendants, newest first. The tag never grants access to anything.
  • POST /v1/tags/{tag_id}/merge Merge Tag. Move every assignment into another tag, then remove this one. The surviving tag keeps its description. Descendants move under the target.
  • GET /v1/tags/{tag_id}/suggestions Tag Suggestions. "Grow this tag": items that look like the ones already in it, and are not in it yet.

Tasks

  • GET /v1/tasks List Tasks. Tasks this credential started, newest first. state=failed is what needs attention.
  • GET /v1/tasks/{task_id} Get Task

Today

  • POST /v1/highlights/{note_id}/review Review Highlight. Review one of your highlights: keep it coming back at longer intervals (1, 3, 7, 21, 60, then 180 days), start it over, or finish it.
  • GET /v1/today Today. What to look at again today. Each list is short, and empty when there is nothing; only what you can read now is in it.

Tokens

  • GET /v1/tokens List Tokens. Your tokens, plus service tokens in workspaces you administer.
  • POST /v1/tokens Create Token. Create a token. The secret is returned once and stored only as a hash.
  • DELETE /v1/tokens/{token_id} Revoke Token. Revoke a token. Takes effect on the next request. Revoking twice is fine.

Trust center

  • GET /v1/grants List Grants. Apps and agents you've connected, with what each can do and where.
  • DELETE /v1/grants/{grant_id} Revoke Grant. Revoke an app's access. Its access and refresh tokens stop working on their next use.
  • GET /v1/grants/{grant_id}/activity Grant Activity. What a connected app did recently, from the audit log.
  • GET /v1/grants/{grant_id}/reads Grant Reads. The cards a connected app read in the last 30 days, most recent first: ids, titles and times from the audit log, cards you can no longer read left out.

Watches

  • GET /v1/items/{item_id}/compare/{other_id} Compare Versions. Two versions of a card as one diff of their text, older to newer: what changed, word by word. Needs items:read; a version you can't read is not found.
  • DELETE /v1/items/{item_id}/watch Unwatch Item. Stop watching this page. The versions it caught stay.
  • PUT /v1/items/{item_id}/watch Watch Item. Tell me when this page changes: Caute reads it again about once a week, through its own fetcher, and when the page's text has changed keeps the page as it is now as a new version of this card, lists it on Today, and writes a source.changed event. Setting it again resumes a paused watch. Pro+ and Team, a number per workspace (quota_exceeded past it).
  • POST /v1/items/{item_id}/watch/check Check Watch Now. Read the page again now instead of waiting for the next check.
  • GET /v1/watches List Watches. The pages watched for change that you can see, newest first. Yours alone, through Caute's own apps.

Webhooks

  • GET /v1/webhooks List Webhooks. Webhooks this credential set up; signed in, every one of yours, including those your tokens and connected apps set up. Newest first.
  • POST /v1/webhooks Create Webhook. Be sent each event as it happens. The answer holds the signing secret, which is never shown again. Delivery starts with the next event.
  • DELETE /v1/webhooks/{webhook_id} Delete Webhook
  • GET /v1/webhooks/{webhook_id} Get Webhook
  • PATCH /v1/webhooks/{webhook_id} Update Webhook. Change where it goes or what it is sent, or turn it off and on. Turned back on, it carries on from the first event it hadn't delivered.

Workspaces

  • POST /v1/invites/accept Accept Invite. Join, from the link in the email. The invitation names an address, and only the person signed in as that address can use it.
  • GET /v1/spaces List Spaces. Spaces the caller can read or write.
  • POST /v1/spaces Create Space. A space is who can see something, never what it is about. Topics are tags.
  • PATCH /v1/spaces/{space_id} Update Space
  • GET /v1/spaces/{space_id}/members List Space Members
  • PUT /v1/spaces/{space_id}/members Share Space. Give someone access to a space. Sharing is always an explicit act, and this is it.
  • DELETE /v1/spaces/{space_id}/members/{user_id} Unshare Space
  • GET /v1/workspaces List Workspaces. Workspaces the caller belongs to. A token sees only its own workspace.
  • POST /v1/workspaces Create Team. A team, with one shared space to put things in and you as its owner.
  • GET /v1/workspaces/{workspace_id}/activity Workspace Activity. What has happened in this workspace, reads included. The audit log's own policy answers only to an admin of the workspace, so a member who asks simply gets nothing.
  • GET /v1/workspaces/{workspace_id}/activity.csv Workspace Activity Csv. A month of this workspace's audit log as CSV: when, who, what and which spaces, never what was read. For owners and admins, signed in.
  • GET /v1/workspaces/{workspace_id}/agents Agent Activity Summary. Which agents read which of this team's spaces this month: reads, searches, questions and saves by space, who connected each, and the property keys its filters named (keys only). For owners and admins, signed in. Caute's own apps act as the person and are not listed.
  • GET /v1/workspaces/{workspace_id}/ai Get Workspace Ai. Which model answers this workspace's questions and briefs, the models it may choose from, and whether it uses its own key.
  • PATCH /v1/workspaces/{workspace_id}/ai Update Workspace Ai. Choose the model for ask and briefs. Pro+ and Team; an owner or admin.
  • DELETE /v1/workspaces/{workspace_id}/ai/key Remove Own Key. Stop using the workspace's own key, at once: the next question is answered with Caute's. The sealed key is deleted, not kept. Signed in, an owner or admin, on any plan.
  • PUT /v1/workspaces/{workspace_id}/ai/key Set Own Key. Answer this workspace's questions and briefs with its own key: Google's, Anthropic's or OpenAI's. The provider is asked one tiny question with it first, so a wrong key is refused now. Replaces any key added before, and a key from another provider resets the model to that provider's default. Signed in, an owner or admin, Pro+ and Team.
  • GET /v1/workspaces/{workspace_id}/apps List Team Apps. The apps connected to this workspace, and any it blocked. Allowed is the default. For owners and admins, signed in. Caute's own apps act as the person and are not listed.
  • PUT /v1/workspaces/{workspace_id}/apps/{client_id} Set Team App. Block an app from every space in this workspace, or allow it again. A blocked app sees none of them on its next request and is not offered them at consent; its access elsewhere is untouched.
  • GET /v1/workspaces/{workspace_id}/domains List Domains
  • POST /v1/workspaces/{workspace_id}/domains Add Domain. Add a domain to prove. The answer says which DNS TXT record to publish.
  • DELETE /v1/workspaces/{workspace_id}/domains/{domain_id} Remove Domain
  • POST /v1/workspaces/{workspace_id}/domains/{domain_id}/verify Verify Domain. Look for the TXT record now. A domain another workspace already proved can't be proved again.
  • GET /v1/workspaces/{workspace_id}/invites List Invites
  • POST /v1/workspaces/{workspace_id}/invites Invite. Ask someone to join. The link is emailed; the row keeps only its hash.
  • DELETE /v1/workspaces/{workspace_id}/invites/{invite_id} Revoke Invite
  • GET /v1/workspaces/{workspace_id}/members List Members. Who is in this workspace. Only its own members can ask.
  • DELETE /v1/workspaces/{workspace_id}/members/{user_id} Remove Member. Take someone out of a workspace.
  • PATCH /v1/workspaces/{workspace_id}/members/{user_id} Set Role
  • DELETE /v1/workspaces/{workspace_id}/sign-in Remove Company Sign In. Stop signing in through the provider. Everyone signs in with emailed links and passkeys again.
  • GET /v1/workspaces/{workspace_id}/sign-in Get Company Sign In. The team's provider, without its secret. Null when none is set.
  • PUT /v1/workspaces/{workspace_id}/sign-in Set Company Sign In. Name the team's provider and its client. Enforcing it needs a verified domain.
  • POST /v1/workspaces/{workspace_id}/transfer Transfer Ownership. Move a team's ownership to another member, in one act: they become the owner and you become an admin. A team has exactly one owner, who alone can do this, signed in.

Start keeping what you find.

Start freeSign in
Caute, by Axionary LabsAppsAssistantsMemoryTeamsCapture recordCompareHelpSupportPrivacyTermsSecuritySubprocessorsDPADevelopers© 2026 Axionary Labs