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: yourclient_idis an HTTPS address serving your app's name, logo and redirect addresses. Send theresourceparameter,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,detailand a stablecode. Act on thecode; show thedetail, which is written for people. - Lists are paged with a
cursor: pass back thenext_cursora page gives until there isn't one. - Saving is safe to retry. Send an
Idempotency-Keyheader 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'sstatussays how far along it is. - Limits are per credential and per account. A request over one is answered
429withRetry-AfterandRateLimitheaders. Something over the person's plan is402or429with the codequota_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/meDelete Account. Delete your account.GET /v1/meGet Me. The caller's identity and the credential in use. A service token has no user.GET /v1/me/preferencesGet Preferences. Your preferences for how Caute's apps show things.PATCH /v1/me/preferencesUpdate Preferences. Change your preferences. Fields left out keep their value.
Auth
POST /auth/logoutLogoutPOST /auth/magic-linkRequest Magic Link. Email a single-use sign-in link. Creates the account on first use.POST /auth/magic-link/verifyVerify Magic Link. Exchange a magic-link token for a session cookie.POST /auth/passkeys/login/optionsPasskey Login Options. Start signing in with a passkey. Passkeys are discoverable, so no email is needed and none is revealed.POST /auth/passkeys/login/verifyPasskey Login VerifyPOST /auth/passkeys/register/optionsPasskey Register Options. Start adding a passkey to the signed-in account.POST /auth/passkeys/register/verifyPasskey Register VerifyPOST /auth/sso/startSso Start. Start signing in through the company's provider for this address's domain.
Briefs
POST /v1/briefsCreate 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/checkpointsList Checkpoints. Where each of your tasks got to: the latest checkpoint per task, newest first, each with the prompt to paste into another assistant. Needsitems:read.POST /v1/checkpointsCheckpoint. 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. Needsnotes:write.POST /v1/checkpoints/resumeResume. 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. Needssearch.
Companion
POST /v1/items/preview:batchItem 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-refsPut 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 RefGET /v1/items/{item_id}/previewItem Preview. A small, cacheable payload for a reference chip. Supports If-None-Match.
Decisions
GET /v1/decisionsList 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. Needsitems:read.POST /v1/decisionsPropose 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. Withfrom_item_id, the words of a private note or memory are copied and the original stays yours ("Propose to the team"). Needsnotes:write.DELETE /v1/decisions/{note_id}/agreeWithdraw Agreement. Take back your agreement while the decision still waits for others.POST /v1/decisions/{note_id}/agreeAgree 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}/decisionsSpace Decisions. Who agrees decisions in this space: any member, or the approvers the owner named (N12).PUT /v1/spaces/{space_id}/decisionsSet 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.
GET /v1/email-addressesList AddressesPOST /v1/email-addressesCreate AddressDELETE /v1/email-addresses/{address_id}Revoke AddressPOST /v1/email-addresses/{address_id}/rotateRotate Address. Issue a new address and retire the old one. Mail to the old address stops being accepted immediately.POST /v1/items/{item_id}/releaseRelease Item. Let a quarantined message through.GET /v1/verified-sendersList SendersPOST /v1/verified-sendersVerify Sender. Vouch for a sender, so their mail is ingested instead of quarantined.DELETE /v1/verified-senders/{address}Unverify Sender
Entities
GET /v1/entitiesList 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}/itemsEntity Items. The cards you can read that mention it, newest first.
Events
GET /v1/eventsEvents. A stream of events for spaces you can read: item.captured, item.searchable, item.failed, item.deleted, and more over time.
Exports
GET /v1/exportsList Exports. Your recent exports, newest first.POST /v1/exportsStart Export. Start an export of everything you can read in a workspace.GET /v1/exports/{export_id}Get Export
Feeds
GET /v1/feedList Feed. Your Feed, newest first.POST /v1/feed/dismissDismiss 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}/keepKeep 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}/pageEntry 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}/releaseRelease 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/subscriptionsList Subscriptions. Everything you follow, waiting senders first, then by name.POST /v1/subscriptionsCreate 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/foldersList 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/opmlExport Opml. Your feeds as OPML, for any other feed reader. To bring feeds in from one, import its OPML file withPOST /v1/importsandsource: opml.DELETE /v1/subscriptions/{subscription_id}Delete Subscription. Unfollow. Its entries leave the Feed; what you kept stays.PATCH /v1/subscriptions/{subscription_id}Update SubscriptionPOST /v1/subscriptions/{subscription_id}/refreshRefresh Subscription. Check a feed now rather than at its next turn.
Imports
GET /v1/importsList Imports. Your imports, newest first.POST /v1/importsStart Import. Import another tool's export into Caute.GET /v1/imports/{import_id}/links-onlyLinks Only. The pages an import couldn't load, kept as links.
Items
GET /v1/attentionAttention. Items that failed or are quarantined, each with a reason.GET /v1/itemsList Items. The timeline: newest first. Embedded assets and superseded versions are hidden.POST /v1/itemsCreate Item. Capture anything. Returns at once; processing happens in the background.POST /v1/items/move:batchMove 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-candidatesVersion 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, withversion_oforPOST /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/checkCheck 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/keepKeep 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 aciteslink 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}/copyCopy 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-versionEarlier 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}/moveMove 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-checkMove 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}/readingSet 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. Needsitems:write, or Caute's own apps.GET /v1/items/{item_id}/renditionGet 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}/reprocessReprocess 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}/textRevert Item Text. Take a correction away, so the card shows what was captured again.GET /v1/items/{item_id}/textGet 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}/textEdit 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/statsStats. A short summary of what you have caught lately, for the home screen.GET /v1/stats/timelineTimeline Stats. Counts for the timeline's tabs, its "Jump to" column and its day heads.POST /v1/uploadsCreate 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/graphCollection 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}/graphCard 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}/linksItem LinksPOST /v1/linksCreate 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/feedbackLink Feedback. Pin a suggestion, which makes it a real link, or dismiss it so it stops being offered.DELETE /v1/links/{link_id}Delete LinkPOST /v1/relatedRelated. Cards close in meaning to a piece of text.
Memory
GET /v1/memoriesList Memories. What your assistants remember about you, each with the app that wrote it and, when it learned it from a card, that card. Needsitems:read.POST /v1/memoriesRemember. Remember something about the person: a note in their private inbox taggedmemory/<app>with a confirmedassistantproperty naming the app, read back by every connected assistant throughrecalland byPOST /v1/gatherwithmemory_only. Withkind = lessonandapplies_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. Needsnotes:write; facts inaboutneeditems:writetoo.POST /v1/memories/forgetForget 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/importImport Memories. Bring what an assistant remembers: paste what it wrote out and each line becomes a memory under its name, withcaught_from = import. The same words pasted again add nothing. Yours alone, in Caute itself.GET /v1/memories/newNew 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/seenMemories Seen. You opened Memory: what is new is counted from now.POST /v1/memories/tryTry 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 samegathera recall runs; no assistant reads anything. Needssearch.POST /v1/memories/{note_id}/keepKeep Lesson. Keep a lesson an assistant suggested: from now onrecallandgatherwith 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}/replacesReplace 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 byrecallorgather; restoring undoes it. Any memory you can read and write, whichever assistant wrote it. Needsnotes:write.POST /v1/memories/{note_id}/restoreRestore Memory. Undo a replacement: the memory is current again and returned to every assistant as before. Yours alone, in Caute itself.
Notes
GET /v1/highlightsList Highlights. Every passage you have marked, newest first, across every card.GET /v1/notesList Notes. Notes newest-edited first, pinned ones at the top.POST /v1/notesCreate NoteGET /v1/notes/countsNote Counts. How many notes and highlights there are, counted the way their lists are, over what you can read.GET /v1/notes/syncSync Notes. Everything an offline client missed: notes changed sincesince, and the ids of notes that are no longer there.DELETE /v1/notes/{note_id}Delete NoteGET /v1/notes/{note_id}Get NotePATCH /v1/notes/{note_id}Patch NotePUT /v1/notes/{note_id}Save NotePOST /v1/notes/{note_id}/appendAppend 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}/editingEditing. Say that this note is open here, and hear who else has it open.POST /v1/notes/{note_id}/restoreRestore Note. Put an earlier body back. The current one is kept first, so this is itself undoable.GET /v1/notes/{note_id}/versionsList 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 PropertyPUT /v1/items/{item_id}/properties/{key}Set Property. Set a property. From an agent withoutproperties:writeit 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}/confirmConfirm Property. Make a suggestion yours: it now counts in filters and exports.POST /v1/items/{item_id}/properties/{key}/dismissDismiss Property. Turn a suggestion down. It is not suggested for this card again.GET /v1/propertiesProperty Keys. The property names on cards you can read, most used first, for a filter to offer.
Search
POST /v1/gatherGather. 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/questionsForget Questions. Forget every question you've asked, on every device.GET /v1/questionsList 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/searchSearch. Keyword and semantic search across every space you can read, in one query. Results explain themselves: passage, anchor, provenance, privacy.DELETE /v1/search/opensForget Search History. Forget all of it. Nothing else changes; ranking simply loses the signal.GET /v1/search/opensSearch History. What Caute has recorded about your searching. Yours alone to see.POST /v1/search/opensRecord Open. Record that a result was opened, for ranking.
Support
GET /v1/support/requestsList Requests. Your conversations with Caute's staff, newest first.POST /v1/support/requestsCreate 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 RequestPOST /v1/support/requests/{request_id}/closeClose. Say it's sorted. Writing again opens it.POST /v1/support/requests/{request_id}/messagesReply. Add to a conversation. A closed one opens again.
Tags
POST /v1/items/tags:batchBatch 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 TagPUT /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}/dismissDismiss Tag. Dismiss a suggestion. It is remembered and never proposed again for this item.GET /v1/saved-searchesList Saved SearchesPOST /v1/saved-searchesCreate Saved SearchDELETE /v1/saved-searches/{search_id}Delete Saved SearchPATCH /v1/saved-searches/{search_id}Update Saved SearchGET /v1/tag-proposalsList Proposals. New tags Caute proposes for groups of your untagged cards, best first. Nothing is tagged until you accept one.POST /v1/tag-proposals/lookLook. Look for new tags now, and then every week. Follow it atGET /v1/tasks/{id}.POST /v1/tag-proposals/{proposal_id}/acceptAccept. 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}/dismissDismiss. Not this one. Caute won't propose it, or mostly the same cards, again.GET /v1/tagsList Tags. Tags you can see, with counts of items you can read.POST /v1/tagsCreate Tag EndpointDELETE /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 TagPOST /v1/tags/{tag_id}/deleteDelete 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}/itemsTag 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}/mergeMerge 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}/suggestionsTag Suggestions. "Grow this tag": items that look like the ones already in it, and are not in it yet.
Tasks
GET /v1/tasksList Tasks. Tasks this credential started, newest first.state=failedis what needs attention.GET /v1/tasks/{task_id}Get Task
Today
POST /v1/highlights/{note_id}/reviewReview 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/todayToday. 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/tokensList Tokens. Your tokens, plus service tokens in workspaces you administer.POST /v1/tokensCreate 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/grantsList 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}/activityGrant Activity. What a connected app did recently, from the audit log.GET /v1/grants/{grant_id}/readsGrant 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. Needsitems:read; a version you can't read is not found.DELETE /v1/items/{item_id}/watchUnwatch Item. Stop watching this page. The versions it caught stay.PUT /v1/items/{item_id}/watchWatch 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 asource.changedevent. Setting it again resumes a paused watch. Pro+ and Team, a number per workspace (quota_exceededpast it).POST /v1/items/{item_id}/watch/checkCheck Watch Now. Read the page again now instead of waiting for the next check.GET /v1/watchesList Watches. The pages watched for change that you can see, newest first. Yours alone, through Caute's own apps.
Webhooks
GET /v1/webhooksList 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/webhooksCreate 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 WebhookGET /v1/webhooks/{webhook_id}Get WebhookPATCH /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/acceptAccept 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/spacesList Spaces. Spaces the caller can read or write.POST /v1/spacesCreate Space. A space is who can see something, never what it is about. Topics are tags.PATCH /v1/spaces/{space_id}Update SpaceGET /v1/spaces/{space_id}/membersList Space MembersPUT /v1/spaces/{space_id}/membersShare 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 SpaceGET /v1/workspacesList Workspaces. Workspaces the caller belongs to. A token sees only its own workspace.POST /v1/workspacesCreate Team. A team, with one shared space to put things in and you as its owner.GET /v1/workspaces/{workspace_id}/activityWorkspace 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.csvWorkspace 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}/agentsAgent 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}/aiGet 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}/aiUpdate Workspace Ai. Choose the model for ask and briefs. Pro+ and Team; an owner or admin.DELETE /v1/workspaces/{workspace_id}/ai/keyRemove 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/keySet 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}/appsList 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}/domainsList DomainsPOST /v1/workspaces/{workspace_id}/domainsAdd Domain. Add a domain to prove. The answer says which DNS TXT record to publish.DELETE /v1/workspaces/{workspace_id}/domains/{domain_id}Remove DomainPOST /v1/workspaces/{workspace_id}/domains/{domain_id}/verifyVerify Domain. Look for the TXT record now. A domain another workspace already proved can't be proved again.GET /v1/workspaces/{workspace_id}/invitesList InvitesPOST /v1/workspaces/{workspace_id}/invitesInvite. Ask someone to join. The link is emailed; the row keeps only its hash.DELETE /v1/workspaces/{workspace_id}/invites/{invite_id}Revoke InviteGET /v1/workspaces/{workspace_id}/membersList 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 RoleDELETE /v1/workspaces/{workspace_id}/sign-inRemove Company Sign In. Stop signing in through the provider. Everyone signs in with emailed links and passkeys again.GET /v1/workspaces/{workspace_id}/sign-inGet Company Sign In. The team's provider, without its secret. Null when none is set.PUT /v1/workspaces/{workspace_id}/sign-inSet Company Sign In. Name the team's provider and its client. Enforcing it needs a verified domain.POST /v1/workspaces/{workspace_id}/transferTransfer 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.