Skip to main content

What only the web app can do

Most of Sensei works with an API key. A few actions need you signed in to the web app, and a key that tries one gets 403 FORBIDDEN. Do them in the web app, or use the alternative named below.

AreaDo it in
API keys and Connected AppsSettings > You > API keys
Profile and accountSettings > You > Account. Settings > You > Preferences for FYI messages.
WorkspacesThe + beside Workspaces in the sidebar to create one. Settings > your workspace > General to rename it, for its logo, to leave it or to delete it.
Members and invitationsSettings > your workspace > Members
BillingSettings > your workspace > Billing
GitHub Connection and IntegrationsSettings > You > Integrations for GitHub and your own. Settings > your workspace > Integrations for workspace tools.
Workspace pagesA workspace's Overview and Settings > your workspace > Activity. An API key reads the sessions that need you and the Activity through the CLI. The Overview's figures have no equivalent.
SenseiThe Sensei page
Personal CronsCrons under Search in the sidebar
Report and blockThe Report and Block items on a member's message, task, Chat Session or profile. Settings > Privacy > Blocked members to unblock.
Browser-only helpersNowhere. The web app calls them as you use it.

API keys and Connected Apps​

A Connected App's Connector Token is refused here too, so an app cannot list or disconnect apps either.

MethodPathDo it in
GET, POST/api/user/api-keysSettings > You > API keys
DELETE/api/user/api-keys/{keyId}Settings > You > API keys, Revoke
GET/api/user/connected-appsSettings > You > API keys, Connected apps
DELETE/api/user/connected-apps/{appId}Settings > You > API keys, Connected apps, Disconnect

Signing in a device​

Approve device sign-in in the browser where you are signed in, by scanning the device's QR code with the iPhone app or typing its code. A workspace device needs an admin of the workspace.

MethodPathDo it in
GET, POST/api/auth/device/verifyThe device approval page, with the code the device shows
POST/api/auth/phone-sign-inSettings, Devices, iPhone and iPad, Add phone: a QR code the signed-out iPhone app scans
GET, POST/api/auth/phone-sign-in/{id}The Add phone dialog, while it waits for the phone, and its Sign in or Cancel
GET/api/user/devicesSettings on your phone, Devices
DELETE/api/user/devices/{id}Settings on your phone, Devices, Remove
GET/api/user/ios-devicesSettings, Devices, iPhone and iPad
DELETE/api/user/ios-devices/{id}Settings, Devices, iPhone and iPad, Remove
GET, PUT/api/user/signatureSettings > You > Signature
GET, PATCH/api/user/notification-devicesSettings on your phone, Notifications
GET, PUT, DELETE/api/user/shared-locationSettings on your phone, Location
POST/api/user/shared-location/fixThe iOS app, when it shares your location with Sensei

Report and block​

Reporting and blocking are your own acts, so only you, signed in, take them. See Report and block.

MethodPathDo it in
POST/api/organizations/{workspaceId}/content-reportsReport on a member's message, task, Chat Session or profile
GET/api/user/content-reportsThe app reads it to show "You reported this message"
GET/api/user/blocksSettings > Privacy > Blocked members
POST/api/user/blocksBlock on a member's message, task, Chat Session or profile
DELETE/api/user/blocks/{userId}Settings > Privacy > Blocked members, Unblock

Profile and account​

Reading your profile works with an API key, as kosuke user profile get.

MethodPathDo it in
PUT/api/user/profileSettings > You > Account for your name. Settings > You > Preferences for FYI messages.
PUT/api/user/profile-imageSettings > You > Account
POST/api/user/complete-onboardingThe sign-up steps in the web app
GET, DELETE/api/user/delete-accountSettings > You > Account, Delete account

Workspaces​

MethodPathDo it in
GET/api/organizations/resolveOpening a workspace from its address, a project, or Settings. Superadmins can also open it from the admin workspace directory.
POST/api/organizations+ beside Workspaces in the sidebar, or New workspace
PATCH/api/organizations/{workspaceId}Settings > your workspace > General, Workspace Name
DELETE/api/organizations/{workspaceId}Settings > your workspace > General, Delete workspace
PUT, DELETE/api/organizations/{workspaceId}/logoSettings > your workspace > General
POST/api/organizations/{workspaceId}/leaveSettings > your workspace > General, Leave workspace

Members and invitations​

An API key lists members and pending invitations with kosuke workspaces members list.

MethodPathDo it in
POST/api/organizations/{workspaceId}/invitationsSettings > your workspace > Members, Invite member
DELETE/api/organizations/{workspaceId}/invitations/{invitationId}Settings > your workspace > Members
PATCH, DELETE/api/organizations/{workspaceId}/members/{userId}Settings > your workspace > Members
POST/api/organizations/{workspaceId}/transfer-ownershipSettings > your workspace > Members

Billing​

An API key reads the balance with kosuke workspaces credits get and usage with kosuke workspaces usage get.

MethodPathDo it in
POST/api/billing/checkoutSettings > your workspace > Billing
POST/api/billing/portalSettings > your workspace > Billing, Manage billing
POST/api/billing/syncSettings > your workspace > Billing
GET/api/billing/invoicesSettings > your workspace > Billing
GET/api/billing/previewSettings > your workspace > Billing
PATCH/api/billing/overageSettings > your workspace > Billing

GitHub Connection and Integrations​

An API key reads your GitHub Connection with kosuke github connection get. It reads the integrations with kosuke integrations connections list and kosuke integrations connections get. It lists the integrations you connected for yourself with kosuke integrations connections list personal and disconnects one with kosuke integrations connections delete personal; a workspace admin cannot do either for you.

Telegram login routes and WhatsApp link routes are browser-only. For WhatsApp, starting a link, reading its QR code or pairing code, cancelling it and resuming a paused connection all need your browser in Settings > You > Integrations. An API key can list and disconnect the connection, as it can for Telegram.

MethodPathDo it in
GET/api/auth/github/connectSettings > You > Integrations, Connect
GET/api/auth/github/callbackSettings > You > Integrations
POST/api/auth/github/disconnectSettings > You > Integrations
POST/api/user/personal-spaceSettings > Personal > Integrations, creating Personal when needed
POST, DELETE/api/organizations/{workspaceId}/integrations/{toolkit}/connectSettings > your workspace > Integrations
GET, POST/api/organizations/{workspaceId}/integrations/{toolkit}/selectionSettings > your workspace > Integrations
PATCH, DELETE/api/organizations/{workspaceId}/integrations/{toolkit}/connections/{connectionId}Settings > your workspace > Integrations
POST, DELETE/api/user/integrations/{toolkit}/connectSettings > You > Integrations
GET, POST/api/user/integrations/{toolkit}/selectionSettings > You > Integrations
GET/api/user/integrations/{toolkit}/connections/{connectionId}/watchSettings > You > Integrations, Watching
PATCH/api/user/integrations/{toolkit}/connections/{connectionId}Settings > You > Integrations
POST/api/user/integrations/excalidraw/connectionsSettings > You > Integrations, Excalidraw
POST/api/user/integrations/telegram/loginsSettings > You > Integrations, Telegram
GET, DELETE/api/user/integrations/telegram/logins/{loginId}Settings > You > Integrations, Telegram
POST/api/user/integrations/telegram/logins/{loginId}/codeSettings > You > Integrations, Telegram
POST/api/user/integrations/telegram/logins/{loginId}/passwordSettings > You > Integrations, Telegram
POST/api/user/integrations/whatsapp/linksSettings > You > Integrations, WhatsApp
GET, DELETE/api/user/integrations/whatsapp/links/{attemptId}Settings > You > Integrations, WhatsApp
POST/api/user/integrations/whatsapp/connections/{connectionId}/resumeSettings > You > Integrations, WhatsApp
GET/api/auth/composio/callbackSettings > your workspace > Integrations, or Settings > You > Integrations
POST/api/organizations/{workspaceId}/integrations/kosuke/connectionsSettings > your workspace > Integrations, Sensei
PATCH, DELETE/api/organizations/{workspaceId}/integrations/kosuke/connections/{connectionId}Settings > your workspace > Integrations, Sensei
POST/api/organizations/{workspaceId}/integrations/apple_ads/connectionsSettings > your workspace > Integrations, Apple Ads
PATCH, DELETE/api/organizations/{workspaceId}/integrations/apple_ads/connections/{connectionId}Settings > your workspace > Integrations, Apple Ads
PUT/api/organizations/{workspaceId}/integrations/apple_ads/connections/{connectionId}/credentialsSettings > your workspace > Integrations, Apple Ads
GET/api/organizations/{workspaceId}/integrations/apple_ads/connections/{connectionId}/public-keySettings > your workspace > Integrations, Apple Ads

Workspace pages​

MethodPathDo it in
GET/api/organizations/{workspaceId}/homeA workspace's Overview. An API key reads the sessions that need you with kosuke sessions list --needs-you or kosuke agent summary get.
GET/api/organizations/{workspaceId}/home/recently-doneOverview, Recently done, Show more. An API key lists done tasks with kosuke tasks list.
GET/api/organizations/{workspaceId}/devicesSettings > your workspace > Devices, the workspace's devices. An API key has no equivalent: a session's agent lists the ones it may ask for with kosuke devices list.
POST/api/organizations/{workspaceId}/devices/codesSettings > your workspace > Devices, Add workspace device. The code signs a Mac in, so only an admin's own session gets one.
GET/api/organizations/{workspaceId}/devices/codes/{codeId}The Add workspace device dialog, while it waits for the Mac to enter the code.
DELETE/api/organizations/{workspaceId}/devices/{deviceId}Settings > your workspace > Devices, Remove on a workspace device.
GET/api/projects/{projectId}/chat-sessions/{sessionId}/device-grantsThe device requests in a Chat Session's chat. A session's agent reads its own with kosuke devices list, and your API key reads them with kosuke sensei device-requests list.
POST/api/projects/{projectId}/chat-sessions/{sessionId}/device-grants/{grantId}Approve, Decline or Withdraw on a device request in a Chat Session's chat. Your API key and your Sensei, after your own yes, approve or decline one with kosuke sensei device-requests update. A session's agent and a Cron never answer one, even acting as you.
GET/api/organizations/{workspaceId}/activitySettings > your workspace > Activity. An API key reads the same events with kosuke activity list.
POST/api/organizations/{workspaceId}/activity/seenSettings > your workspace > Activity. An API key marks events seen with kosuke activity list --mark-seen.

Personal Crons​

A Personal Cron belongs to you and to no workspace. An API key lists, reads, creates, changes and fires one, and reads its runs, with kosuke crons, repositories included: a Personal Cron picks only your Personal Repositories and Apps, and the API refuses a project of any workspace. Deleting one, the sidebar count, a run's transcript and Stop stay in the web app. A sandbox run, which a Personal Cron with repositories makes, also has Artifacts. An API key and your Sensei can list them across the Cron or one run, and read one, through /api/user/crons/{cronId}/artifacts, /api/user/crons/{cronId}/runs/{runId}/artifacts and /api/user/crons/{cronId}/runs/{runId}/artifacts/{artifactId}. Binary downloads stay in the web app.

A sandbox run’s live stream is on its run page. These Personal Cron operations stay in the web app:

MethodPathDo it in
GET/api/user/crons/summaryThe Crons row under Search in the sidebar
DELETE/api/user/crons/{cronId}Crons under Search, a cron's … menu, Delete
GET/api/user/crons/{cronId}/runs/{runId}/messagesA run's page, its transcript. For a run in the cron's thread, the thread in Sensei holds the same messages. A sandbox run's transcript is the Cron Agent's.
POST/api/user/crons/{cronId}/runs/{runId}/cancelA run's page, Stop, or Stop on the running Turn in the cron's thread
GET/api/user/crons/{cronId}/runs/{runId}/artifacts/{artifactId}/downloadA sandbox run’s Artifacts, Download

Sensei​

A Sensei Chat is private to its person, so only the Sensei page changes it, and the Apple Watch and the Meta glasses signed in as that person, with the key the device sign-in gave them. Your API key reads your own chat with kosuke sensei chat get, but it cannot send to it. A prototype Sensei draws is a file in the workspace's Files, which your API key reads with kosuke files get. kosuke sessions artifacts create copies one onto a ticket, where the ticket's artifacts routes read it.

MethodPathDo it in
POST/api/sensei/attachmentsStage a private message attachment from the Sensei page or an admitted device credential; a regular API key cannot use it.
POST/api/sensei/messagesThe Sensei page
POST/api/sensei/messages/{messageId}/prototypesSave as prototype below an interactive document in a Sensei Thread
POST/api/sensei/stopThe Sensei page
GET/api/user/memoryThe Memory page. Your API key reads Memory with kosuke sensei memory get.
PUT/api/user/memory/{file}The Memory page. Sensei changes Memory only with kosuke sensei memory set, for a card you approved.
POST/api/sensei/first-cardAnswer and Skip on the first card of the Welcome thread
GET/api/sensei/first-run-notificationsThe iPhone app, which waits to ask for notifications while the Welcome thread can still ask in the chat
GET/api/sensei/connectThe Connect buttons in Sensei's messages
POST/api/sensei/connect/attemptsConnect in Sensei's messages
POST/api/sensei/connect/attempts/{attemptId}Finishing a sign-in started from Connect in Sensei's messages
POST/api/sensei/connect/not-nowNot now under the Connect buttons in Sensei's messages
GET/api/sensei/project-cardThe Repository and Describe cards in Sensei's messages
POST/api/sensei/project-cardImport on the Repository card and Create project on the Describe card in Sensei's messages
POST/api/sensei/runtime-commandsThe Sensei page
GET/api/sensei/skillsThe Sensei page
GET/api/sensei/channelThe Sensei page
GET/api/sensei/threads/countsThe Sensei page, the count on Threads and on the Sensei row of the sidebar
GET/api/sensei/threads/sessionsThe Sensei page, the thread each session card opens
GET/api/sensei/threads/{threadId}/delegatesThe Sensei page, the progress line of a thread's working delegate, on each step it announces
POST/api/sensei/threads/{threadId}/pinThe Sensei page, Pin on a thread
DELETE/api/sensei/threads/{threadId}/pinThe Sensei page, Unpin on a thread
PUT/api/sensei/threads/{threadId}/titleThe Sensei page, Rename on a thread
POST/api/sensei/presenceThe Sensei page
GET/api/sensei/modelSensei's composer, and the Sensei page outside the channel
PUT/api/sensei/modelSensei's composer
PUT/api/sensei/limit-noticeHide a provider-limit switch notice in the member's own thread
POST/api/sensei/cards/{cardId}/actionsThe Sensei page
POST/api/sensei/threads/{threadId}/events/retryThe Sensei page, Retry on "Sensei could not read N updates"
POST/api/projects/{projectId}/chat-sessions/{sessionId}/approveThe pull request's Approve in the session's panel. An approval is yours alone, so no key gives it.
POST/api/projects/{projectId}/chat-sessions/{sessionId}/branch-syncSync in the session's panel. An agent sends /kosuke:sync-branch or runs gh pr update-branch instead.
POST/api/projects/{projectId}/merge-agent/messagesProject settings, Merge agent, the chat column's composer
POST/api/sensei/cards/{cardId}/show-on-iphoneShow on iPhone on the Apple Watch
GET/api/sensei/cards/{cardId}/messagesThe Sensei page, a conversation opened on the FYI messages card. An agent reads the same messages from their events.
GET/api/sensei/messages/mediaThe Sensei page, a sticker, GIF or photo drawn on the FYI messages card, read through the member's own connection
GET/api/sensei/messages/emojiThe Sensei page, a custom Slack emoji drawn on the FYI messages card
GET/api/sensei/cards/{cardId}/recordingA card's QA recording on the Apple Watch. An agent reads the QA Report with kosuke sessions artifacts get.
GET/api/sensei/queueThe Sensei page
PATCH, DELETE/api/sensei/queue/{queuedMessageId}The Sensei page
POST/api/sensei/queue/{queuedMessageId}/steerThe Sensei page
POST/api/sensei/queue/{queuedMessageId}/sendThe Sensei page
POST/api/sensei/queue/{queuedMessageId}/moveThe Sensei page
POST, DELETE/api/sensei/queue/{queuedMessageId}/editThe Sensei page
POST/api/sensei/queue/resumeThe Sensei page
GET/api/sensei/recordings/playerThe Sensei page, a Turn’s browser recording player
GET/api/sensei/recordings/{recordingId}The Sensei page, a browser run's recording
GET, PATCH/api/user/getting-startedThe Sensei page, Get started
POST/api/sensei/quick-questionsThe desktop app's Spotlight once asked Quick Questions here; it now shows an answer card instead. A Quick Question is answered in Spotlight alone, so no key asks or reads one.
GET/api/sensei/quick-questions/{threadId}Reads a Quick Question that the desktop app's Spotlight asked before its answer card

YOLO projects​

Changing what a YOLO project's default branch or live app holds is a member's tap in the web app. An API key and an agent read the Versions, the Releases and the live app read-only with kosuke projects versions list, kosuke projects releases list and kosuke projects live. An API key can switch a project between YOLO mode and Collaboration with kosuke projects workflow set, so that route is not listed here.

MethodPathDo it in
GET/api/projects/{projectId}/app-projectOpening a YOLO project, which shows its chat
POST/api/projects/{projectId}/app-project/chatOpening a YOLO project that has no chat, which creates it
GET/api/projects/{projectId}/workflowSettings > Advanced, the Workflow setting and the counts its Switch to App dialog shows
POST/api/projects/{projectId}/versions/{number}/restoreThe chat, Restore on a saved version
POST/api/projects/{projectId}/app-project/fixThe chat, Fix it under a Turn that was not saved
POST/api/projects/{projectId}/app-project/discardThe chat, Discard changes under a Turn that was not saved
GET/api/projects/{projectId}/downloadSettings > GitHub, Download .zip
GET, POST, DELETE/api/projects/{projectId}/publishPublish in the project header, and Unpublish in its popover
POST/api/projects/{projectId}/releases/{releaseId}/rollbackThe Releases list, Roll back
POST/api/projects/{projectId}/live/writes/{writeId}/applyThe chat, Apply on a proposed live data change. An agent proposes one with kosuke projects live writes create.
POST/api/projects/{projectId}/live/writes/{writeId}/dismissThe chat, Dismiss on a proposed live data change

Browser-only helpers​

The web app calls these as you use it. A script has no reason to call them, and the alternatives below cover what they show.

MethodPathDo it in
GET/api/organizations/{workspaceId}/tasks/by-session/{sessionId}Opening a task from the Tasks page or Sensei. An API key reads the task directly with kosuke tasks get.
POST/api/projects/{projectId}/chat-sessions/{sessionId}/relevance-checkTyping in the web app's composer
POST/api/dictationThe Mic button in a Chat Session's or Sensei's composer, which records from the browser's microphone
POST/api/dictation/sessionThe same Mic button, which streams the microphone to Gemini while you speak
POST/api/composer-completionsTyping in the web app's composers, which suggest the rest of a sentence
GET/api/preview/authOpen a direct Preview link in your browser
POST/api/preview/wakeThe starting page for a member’s direct Preview link
GET/api/preview/wake/{operationId}The same starting page, while it waits for the requested service
GET/api/projects/{projectId}/preview/auth-tokenThe Preview tab
GET/api/preview-sessions/statusSwitching sessions in the web app
POST, DELETE/api/projects/{projectId}/preview/viewingThe Preview tab
POST, DELETE/api/projects/{projectId}/chat-sessions/{sessionId}/queue/{queuedMessageId}/editEditing a message Up next in the composer. An API key edits it with kosuke sessions queue update.
POST, DELETE/api/projects/{projectId}/settings/agentic-deploy/queue/{queuedMessageId}/editEditing a Deploy Chat message Up next. An API key edits it with kosuke deploys queue update.
GET/api/projects/{projectId}/chat-sessions/{sessionId}/preview/files/rawImages in the Files tab. An API key reads files with kosuke sessions files get.
GET/api/projects/{projectId}/chat-sessions/{sessionId}/preview/diff/blobImages in the Changes tab
GET/api/projects/{projectId}/chat-sessions/{sessionId}/agents/{agentId}Opening a subagent in the chat. An API key reads a subagent's whole output with kosuke sessions messages get on a message that holds it.
GET/api/organizations/{workspaceId}/files/{fileId}/contentFiles > Open or Download; an API key gets a download URL with kosuke files get.
PUT/api/organizations/{workspaceId}/files/{fileId}Files > Replace; an API key replaces by path with kosuke files set.
GET/api/user/files/{fileId}/contentYour personal Files > Open or Download; an API key gets a download URL with kosuke files get personal.
PUT/api/user/files/{fileId}Your personal Files > Replace; an API key replaces by path with kosuke files set personal.
GET/api/projects/{projectId}/chat-sessions/{sessionId}/artifacts/{artifactId}/downloadDownloads in the Artifacts tab. An API key reads an artifact's text or media URL with kosuke sessions artifacts get.
GET/api/organizations/{workspaceId}/crons/{cronId}/runs/{runId}/artifacts/{artifactId}/downloadDownloads on a Cron Run's page. The run's Artifact read endpoint gives an API key the source text or a media URL.
GET/api/organizations/{workspaceId}/crons/searchThe @ menu in Sensei's composer. An API key finds a cron by name with kosuke crons list --search.
PUT/api/user/analytics-consentYour choice of analytics cookies, in the cookie banner or under Settings > Your Account > Security, Manage
POST/api/product-eventsUsing the web app, which reports the pages you open, Sensei Cards, Previews and GitHub connections to Sensei's own product statistics, unless you declined statistics cookies
GET/api/command-searchSearch in the sidebar or Cmd+K. Searches platform items you can open. An API key uses each item's own list or search command.
GET/api/spotlight/searchTyping in the desktop app's Spotlight. An API key searches every workspace with kosuke sessions list --q, kosuke workspaces artifacts search and kosuke crons list.
GET/api/spotlight/homeOpening the desktop app's Spotlight. An API key reads what waits on you with kosuke sessions list --needs-you.
POST/api/spotlight/intentTyping in the desktop app's Spotlight: whether an answer card shows above the results.
POST/api/spotlight/answerThe quick answer on Spotlight's answer card, for a general question. It is not saved anywhere.
GET/api/spotlight/ratesThe exchange rates Spotlight's calculator converts with.
GET/api/devicesSettings, Devices, the list of your Macs. An API key reads whether your Mac is online with kosuke mac status get.
POST/api/devicesSigning in to the desktop app, which connects your Mac. An API key reads whether it is online with kosuke mac status get.
DELETE/api/devices/{deviceId}Signing out of the desktop app, which disconnects your Mac, and Settings, Devices, Remove on a Mac.
PUT/api/devices/{deviceId}/sessionOpening the desktop app while signed in, which tells Sensei which session its Mac holds.
GET/api/devices/{deviceId}/chrome-profilesSettings, Devices, Chrome sign-ins on a Mac: its Chrome profiles and which ones Sensei can use.
POST/api/devices/{deviceId}/chrome-profilesSettings, Devices, Chrome sign-ins: the switch that lets Sensei use a profile or turns it off. Only you change them, so Sensei and an API key cannot.
GET/api/sensei/reels/laterSensei Reels checks whether you have already confirmed sending a card to Later.
POST/api/sensei/reels/laterSend to Later remembers your first confirmation in Sensei Reels.

Next steps​