intentic
Download the app
Download the app
Connected systems

Capabilities

The outside systems this sandbox is wired into, and connecting a new one

On this page(14 sections)

A capability is a system the agent can reach: a forge account, a chat server, a database, one of your own machines. These routes connect and disconnect them, carry the credential each needs, report whether a connection is live, and drive the interactive parts of a sign-in, including a one-time code.

14 calls. Pick one to open it, or use the list on the right.

GET/capabilitiesEverything this sandbox is connected to

Each connection with its live state, the settings that are safe to show, and the names of the credentials it holds. The values of those credentials are never in the answer, on any route but one.

What you send

Nothing. Call it as it is.

What comes back

FieldType
capabilitiesWhat this sandbox is connected toobject[]
idThe connection's idstring
kindWhat sort of thing it is"devops" | "monorepo" | "mcp" | "cli" … (21)
statusWhether it is workingobject
stateWhether it is live, still coming…"active" | "pending" | "error" | "inactive"
detailWhat is wrong, in words a…string
codeA short marker for that reason,…string
settlingTrue while something under way will…boolean
configIts settings, minus anything secretobject
secretsWhich credentials it holds, by namestring[]
recommendationsThings worth connecting, worked out from…object[]
entryWhich catalog entry is being suggestedstring
evidenceWhat was seen that prompted it:…string
reasonThe same claim in words, without…string
prefillSettings the scan could read, to…object
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.list();
POST/capabilitiesConnect something, or change a connectionstream

Writes a connection and streams the work of applying it, because some kinds provision real infrastructure and take a while. Sending an id that already exists edits that connection: this is the edit as well as the create. Since a caller is never shown stored credentials, it marks the ones it is leaving alone and the daemon fills them in, which is the only way to change one setting without retyping a key.

What you send

FieldTypeWhere
when kind is "devops"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "monorepo"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "mcp"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredWhere the tool server answersstringbody
tokenThe credential it needs, if anystringbody
when kind is "cli"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequiredWhich tool to give the agentstringbody
when kind is "plugin"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the plugin…stringbody
refA branch, tag or commit to…stringbody
pathWhere inside the repository the plugin…stringbody
tokenA credential for a private repositorystringbody
commitThe exact commit installed, in full,…stringbody
when kind is "extension"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the extension…stringbody
refrequiredThe exact commit to install, in…stringbody
pathWhere inside the repository the extension…stringbody
tokenA credential for a private repositorystringbody
registryWhich registry this install came from,…stringbody
when kind is "ssh"shapebody
idrequiredstringbody
configrequiredobjectbody
when auth is "key"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
privateKeyrequiredThe private key, wholestringbody
when auth is "generated"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
privateKeyrequiredThe private half of the generated…stringbody
when auth is "password"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
passwordrequiredThe passwordstringbody
when kind is "vpn"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "wireguard"shapebody
configrequiredstringbody
autoConnect"on" | "off"body
when provider is "fortinet"shapebody
serverrequiredstringbody
portintegerbody
usernamerequiredstringbody
passwordrequiredstringbody
trustedCertstringbody
realmstringbody
autoConnect"on" | "off"body
when provider is "ipsec"shapebody
serverrequiredstringbody
presharedKeyrequiredstringbody
localIdstringbody
remoteIdstringbody
usernamestringbody
passwordstringbody
ikeVersion"1" | "2"body
pfs"on" | "off"body
dhGroup"2" | "5" | "14" | "15" … (7)body
aggressive"on" | "off"body
routedNetworksstringbody
autoConnect"on" | "off"body
when kind is "exit"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "tor"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "vpngate"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "wireguard"shapebody
configrequiredstringbody
countrystringbody
autoStart"on" | "off"body
when kind is "netdisk"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequired"smb"body
serverrequiredThe NAS or file server: a…stringbody
sharerequiredThe share name, the first path…stringbody
pathA folder inside the share to…stringbody
usernamerequiredThe account the sandbox mounts asstringbody
passwordIts passwordstringbody
domainThe Windows domain or workgroup, only…stringbody
accessWhether the agent may write to…"read" | "readwrite"body
versionThe SMB dialect to insist on"auto" | "3.1.1" | "3.0" | "2.1" … (5)body
autoMount"on" | "off"body
when kind is "docker"shapebody
idrequiredstringbody
configrequiredobjectbody
gpu"on" | "off"body
registryMirrorstringbody
insecureRegistriesstringbody
addressPoolstringbody
when kind is "browser"shapebody
idrequiredstringbody
configrequiredobjectbody
platformrequiredstringbody
usernamestringbody
passwordstringbody
identitystringbody
purposestringbody
openedAtstringbody
exitstringbody
when kind is "identity"shapebody
idrequiredstringbody
configrequiredobjectbody
emailrequiredstringbody
passwordstringbody
mailboxstringbody
loginUrlstringbody
openAccounts"on" | "off"body
exitstringbody
when kind is "device"shapebody
idrequiredstringbody
configrequiredobjectbody
shell"on" | "off"body
write"on" | "off"body
screen"on" | "off"body
control"on" | "off"body
sandboxes"on" | "off"body
destructive"on" | "off"body
rootsstringbody
platformrequiredstringbody
when kind is "webext"shapebody
idrequiredstringbody
configrequiredobjectbody
read"on" | "off"body
act"on" | "off"body
screenshot"on" | "off"body
cookies"on" | "off"body
confirm"sensitive" | "always" | "never"body
platformrequiredstringbody
when kind is "phone"shapebody
idrequiredstringbody
configrequiredobjectbody
screen"on" | "off"body
control"on" | "off"body
files"on" | "off"body
write"on" | "off"body
notifications"on" | "off"body
apps"on" | "off"body
destructive"on" | "off"body
confirm"sensitive" | "always" | "never"body
platformrequiredstringbody
when kind is "agent"shapebody
idrequiredstringbody
configrequiredobjectbody
commandrequiredstringbody
namestringbody
envstringbody
loginCommandstringbody
when kind is "endpoint"shapebody
idrequiredstringbody
configrequiredobjectbody
baseUrlrequiredstringbody
protocol"openai" | "anthropic"body
apiKeystringbody
headersstringbody
when kind is "localmodel"shapebody
idrequiredstringbody
configrequiredobjectbody
modelrequiredstringbody
gpu"on" | "off"body
urlstringbody
context"16384" | "32768" | "65536" | "131072" | "custom"body
contextTokensintegerbody
when kind is "wallet"shapebody
idrequiredstringbody
configrequiredobjectbody
network"eip155:8453" | "eip155:84532"body
addressstringbody
perPaymentMaxUsdstringbody
autoApproveUnderUsdstringbody
dailyCapUsdstringbody
allowstringbody
denystringbody
… and 1 more shapesIn the OpenAPI documentshapebody

What comes back

FieldType
when event is "message"shape
dataobject
kindstring
idstring
retrynumber
when event is "done"shape
dataunknown
idstring
retrynumber
when event is "error"shape
dataunknown
idstring
retrynumber
Try itanswered in this tab
curl
curl -N -X POST "$SANDBOX/capabilities" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"id":"a1b2c3d4","kind":"devops","config":{}}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.add({
  "id": "a1b2c3d4",
  "kind": "devops",
  "config": {}
});
POST/capabilities/probeTest a connection's settings without saving them

Dials the service the way this connection would and hands back what it said, before anything is written. The answer is the service's own confirmation or its exact refusal, so a wrong token or an unreachable host is found on the form rather than on a card afterwards.

What you send

FieldTypeWhere
when kind is "devops"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "monorepo"shapebody
idrequiredstringbody
configrequiredobjectbody
when kind is "mcp"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredWhere the tool server answersstringbody
tokenThe credential it needs, if anystringbody
when kind is "cli"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequiredWhich tool to give the agentstringbody
when kind is "plugin"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the plugin…stringbody
refA branch, tag or commit to…stringbody
pathWhere inside the repository the plugin…stringbody
tokenA credential for a private repositorystringbody
commitThe exact commit installed, in full,…stringbody
when kind is "extension"shapebody
idrequiredstringbody
configrequiredobjectbody
urlrequiredThe repository to take the extension…stringbody
refrequiredThe exact commit to install, in…stringbody
pathWhere inside the repository the extension…stringbody
tokenA credential for a private repositorystringbody
registryWhich registry this install came from,…stringbody
when kind is "ssh"shapebody
idrequiredstringbody
configrequiredobjectbody
when auth is "key"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
privateKeyrequiredThe private key, wholestringbody
when auth is "generated"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
privateKeyrequiredThe private half of the generated…stringbody
when auth is "password"shapebody
hostrequiredThe machine's addressstringbody
portWhich port it listens onnumberbody
userrequiredWhich user to connect asstringbody
passwordrequiredThe passwordstringbody
when kind is "vpn"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "wireguard"shapebody
configrequiredstringbody
autoConnect"on" | "off"body
when provider is "fortinet"shapebody
serverrequiredstringbody
portintegerbody
usernamerequiredstringbody
passwordrequiredstringbody
trustedCertstringbody
realmstringbody
autoConnect"on" | "off"body
when provider is "ipsec"shapebody
serverrequiredstringbody
presharedKeyrequiredstringbody
localIdstringbody
remoteIdstringbody
usernamestringbody
passwordstringbody
ikeVersion"1" | "2"body
pfs"on" | "off"body
dhGroup"2" | "5" | "14" | "15" … (7)body
aggressive"on" | "off"body
routedNetworksstringbody
autoConnect"on" | "off"body
when kind is "exit"shapebody
idrequiredstringbody
configrequiredobjectbody
when provider is "tor"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "vpngate"shapebody
countrystringbody
autoStart"on" | "off"body
when provider is "wireguard"shapebody
configrequiredstringbody
countrystringbody
autoStart"on" | "off"body
when kind is "netdisk"shapebody
idrequiredstringbody
configrequiredobjectbody
providerrequired"smb"body
serverrequiredThe NAS or file server: a…stringbody
sharerequiredThe share name, the first path…stringbody
pathA folder inside the share to…stringbody
usernamerequiredThe account the sandbox mounts asstringbody
passwordIts passwordstringbody
domainThe Windows domain or workgroup, only…stringbody
accessWhether the agent may write to…"read" | "readwrite"body
versionThe SMB dialect to insist on"auto" | "3.1.1" | "3.0" | "2.1" … (5)body
autoMount"on" | "off"body
when kind is "docker"shapebody
idrequiredstringbody
configrequiredobjectbody
gpu"on" | "off"body
registryMirrorstringbody
insecureRegistriesstringbody
addressPoolstringbody
when kind is "browser"shapebody
idrequiredstringbody
configrequiredobjectbody
platformrequiredstringbody
usernamestringbody
passwordstringbody
identitystringbody
purposestringbody
openedAtstringbody
exitstringbody
when kind is "identity"shapebody
idrequiredstringbody
configrequiredobjectbody
emailrequiredstringbody
passwordstringbody
mailboxstringbody
loginUrlstringbody
openAccounts"on" | "off"body
exitstringbody
when kind is "device"shapebody
idrequiredstringbody
configrequiredobjectbody
shell"on" | "off"body
write"on" | "off"body
screen"on" | "off"body
control"on" | "off"body
sandboxes"on" | "off"body
destructive"on" | "off"body
rootsstringbody
platformrequiredstringbody
when kind is "webext"shapebody
idrequiredstringbody
configrequiredobjectbody
read"on" | "off"body
act"on" | "off"body
screenshot"on" | "off"body
cookies"on" | "off"body
confirm"sensitive" | "always" | "never"body
platformrequiredstringbody
when kind is "phone"shapebody
idrequiredstringbody
configrequiredobjectbody
screen"on" | "off"body
control"on" | "off"body
files"on" | "off"body
write"on" | "off"body
notifications"on" | "off"body
apps"on" | "off"body
destructive"on" | "off"body
confirm"sensitive" | "always" | "never"body
platformrequiredstringbody
when kind is "agent"shapebody
idrequiredstringbody
configrequiredobjectbody
commandrequiredstringbody
namestringbody
envstringbody
loginCommandstringbody
when kind is "endpoint"shapebody
idrequiredstringbody
configrequiredobjectbody
baseUrlrequiredstringbody
protocol"openai" | "anthropic"body
apiKeystringbody
headersstringbody
when kind is "localmodel"shapebody
idrequiredstringbody
configrequiredobjectbody
modelrequiredstringbody
gpu"on" | "off"body
urlstringbody
context"16384" | "32768" | "65536" | "131072" | "custom"body
contextTokensintegerbody
when kind is "wallet"shapebody
idrequiredstringbody
configrequiredobjectbody
network"eip155:8453" | "eip155:84532"body
addressstringbody
perPaymentMaxUsdstringbody
autoApproveUnderUsdstringbody
dailyCapUsdstringbody
allowstringbody
denystringbody
… and 1 more shapesIn the OpenAPI documentshapebody

What comes back

FieldType
checkedWhether this connection can be tested…boolean
okWhether the service answered as itselfboolean
messageWhat happened, in the words a…string
whoWho the service said the credential…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/probe" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"id":"a1b2c3d4","kind":"devops","config":{}}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.probe({
  "id": "a1b2c3d4",
  "kind": "devops",
  "config": {}
});
POST/capabilities/ssh-keyGenerate an SSH key for a connection

Makes an ed25519 key pair inside the sandbox and answers with its public half, to authorize on the server, and a one-time token. The private half is never in the answer: it waits in the sandbox until an add sends the token where the private key goes, and lapses if none does within thirty minutes.

What you send

Nothing. Call it as it is.

What comes back

FieldType
publicKeyThe public half, as the one…string
tokenStands for the private half, which…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/ssh-key" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.sshKey();
DELETE/capabilities/{id}Disconnect something

Tears a connection down. The kinds that own real infrastructure refuse, because deleting those would be losing data rather than losing a connection.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X DELETE "$SANDBOX/capabilities/a1b2c3d4" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.remove({
  "id": "a1b2c3d4"
});
POST/capabilities/{id}/renameRename a connection

Carries everything the old name keyed across with it: a browser profile and its logins, an enrolled machine, an extension's copy of its source. Removing and re-adding would lose exactly the state that made the connection worth keeping. Kinds whose name is part of what they are refuse.

What you send

FieldTypeWhere
idrequiredstringaddress
torequiredstringbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/rename" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"to":"src/server.ts"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.rename({
  "id": "a1b2c3d4",
  "to": "src/server.ts"
});
POST/capabilities/{id}/secretReplace a stored credential

Swaps one connection's key or token for a new one and re-applies it, without touching any of its other settings.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress
valuerequiredThe new credentialstringbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/secret" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"value":"…"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.setSecret({
  "id": "a1b2c3d4",
  "value": "…"
});
GET/capabilities/{id}/statusRe-check one connection

Probes a single connection right now, for a screen that wants to refresh one row rather than the whole list.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
stateWhether it is live, still coming…"active" | "pending" | "error" | "inactive"
detailWhat is wrong, in words a…string
codeA short marker for that reason,…string
settlingTrue while something under way will…boolean
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/status" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.status({
  "id": "a1b2c3d4"
});
GET/capabilities/{id}/connectionA connection's settings, credentials included

The one call that hands back stored secrets, so an extension's own backend can dial the service behind a connection. Never answered for a signed-in person: only a machine credential reaches it, and an extension's only if its manifest asked for this route out loud at install time, and only for a connection of a kind that extension itself contributes.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
idThe connection's idstring
kindWhat sort of thing it isstring
configIts settings exactly as stored, credentials…object
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/connection" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.connection({
  "id": "a1b2c3d4"
});
POST/capabilities/marketplaceRead a plugin marketplace

Resolves a plugin marketplace source into the list of connections you could install from it.

What you send

FieldTypeWhere
urlrequiredThe registry to readstringbody
tokenA credential for a private onestringbody

What comes back

FieldType
nameWhat the registry calls itselfstring
pluginsWhat it lists, each with the…object[]
namestring
descriptionstring
versionstring
kind"plugin" | "extension"
trust"verified" | "listed" | "blocked"
trustReasonstring
securityReviewobject
shastring
urlstring
pathstring
policystring
reviewerstring
reviewedAtstring
runIdstring
deterministicobject
policystring
scannerstring
versionstring
runIdstring
admittedboolean
securityFixboolean
categorystring
artstring
logostring
iconstring
homepagestring
installobject
urlstring
refstring
pathstring
starsinteger
pushedAtstring
checksobject
shastring
manifeststring
bundlestring
enginesstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/marketplace" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://sandbox-a1b2c3d4e5f6.intentic.dev","token":"ict_9wQ4rTz8kLmN3pXbV7hJ"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.marketplace({
  "url": "https://sandbox-a1b2c3d4e5f6.intentic.dev",
  "token": "ict_9wQ4rTz8kLmN3pXbV7hJ"
});
POST/capabilities/refsThe versions a repository offers

Asks a git remote what it advertises and hands back every branch and tag with the commit it points at, plus which branch is its default. Nothing is cloned and nothing is written, so this is cheap enough to answer a form as someone types a repository into it.

What you send

FieldTypeWhere
urlrequiredThe repository to askstringbody
tokenA credential for a private onestringbody
keepingWhich connection a VAULTED token belongs…stringbody

What comes back

FieldType
defaultBranchThe branch the remote advertises as…string
refsEvery branch the remote advertises, then…object[]
nameThe branch or tag as a…string
kind"branch" | "tag"
shaThe commit it points atstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/refs" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"url":"https://sandbox-a1b2c3d4e5f6.intentic.dev","token":"ict_9wQ4rTz8kLmN3pXbV7hJ","keeping":"…"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.refs({
  "url": "https://sandbox-a1b2c3d4e5f6.intentic.dev",
  "token": "ict_9wQ4rTz8kLmN3pXbV7hJ",
  "keeping": "…"
});
DELETE/capabilities/recommendations/{entry}Stop suggesting this connection

Not needed, for now. Nothing is torn down. The suggestion comes back if what prompted it in the workspace changes, because what is remembered is the evidence, not the refusal.

What you send

FieldTypeWhere
entryrequiredWhich suggestion to stop makingstringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X DELETE "$SANDBOX/capabilities/recommendations/%E2%80%A6" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.dismiss({
  "entry": "…"
});
POST/capabilities/{id}/loginSign in to a connection by hand

Opens the connection's own sign-in in a terminal a person can type into, for the flows that need a code pasted or a device confirmed. The answer names the terminal to attach to.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
sessionThe terminal the sign-in is happening…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/capabilities/a1b2c3d4/login" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.login({
  "id": "a1b2c3d4"
});
GET/capabilities/{id}/otpMint a one-time code

Generates a single two-factor code from a stored seed. The one credential-adjacent read an agent is allowed, and it is safe because a code expires in seconds and never reveals the seed, so an agent can answer a prompt without ever holding the factor.

What you send

FieldTypeWhere
idrequiredWhich connectionstringaddress

What comes back

FieldType
codeThe codestring
secondsRemainingHow long it lastsnumber
Try itanswered in this tab
curl
curl "$SANDBOX/capabilities/a1b2c3d4/otp" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.capabilities.otp({
  "id": "a1b2c3d4"
});
More in Connected systems

Type to search every page, in the docs and the API reference.