intentic
Download the app
Download the app
Connected systems

Secrets

Stored values the agent can use without ever reading them

On this page(23 sections)

Write a secret, list which names exist, delete one. Revealing a value is the deliberate exception and the only route that hands one back; everywhere else the daemon substitutes a secret by reference at the moment a command runs.

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

POST/secretsStore a secret

Writes one name and value where the agent's references resolve it, without a restart: desired-state/.env once DevOps is active, the sandbox's own secret store before that.

What you send

FieldTypeWhere
keyrequiredThe name to store it under,…stringbody
valuerequiredThe valuestringbody

What comes back

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

const result = await sandbox.secrets.set({
  "key": "OPENAI_API_KEY",
  "value": "…"
});
GET/secretsNames of the stored secrets

Which secrets exist here. Names only, never values.

What you send

Nothing. Call it as it is.

What comes back

FieldType
keysThe names that exist herestring[]
Try itanswered in this tab
curl
curl "$SANDBOX/secrets" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.list();
POST/secrets/generateMake and store a random secret

Makes a random value and stores it under a new name, where `set` would have put it, for a secret nobody has to find or paste (a session key, a signing secret, a password the task sets up itself). Answers the name and its length, never the value. Refused for a name something here already holds.

What you send

FieldTypeWhere
keyrequiredThe name to store it under:…stringbody
bytesHow much randomness, in bytesintegerbody
formatHow it is spelled: `hex` (0-9,…"hex" | "base64url" | "alnum"body

What comes back

FieldType
keyThe name it is stored understring
lengthHow many characters it is, which…integer
storedWhere it was kept: desired-state/.env once…"env" | "sandbox"
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/generate" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"key":"OPENAI_API_KEY","bytes":32,"format":"hex"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.generate({
  "key": "OPENAI_API_KEY",
  "bytes": 32,
  "format": "hex"
});
DELETE/secrets/{key}Delete a secret

Removes one by name.

What you send

FieldTypeWhere
keyrequiredWhich secret, by namestringaddress

What comes back

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

const result = await sandbox.secrets.remove({
  "key": "OPENAI_API_KEY"
});
GET/secrets/inventoryEvery secret this sandbox holds, from everywhere

One view across all the places secrets live here: what exists, where it came from and whether it is working. Never any values. This one always answers, even before there is a store to write to.

What you send

Nothing. Call it as it is.

What comes back

FieldType
entriesOne entry per secret this sandbox…object[]
keyWhat identifies itstring
kindWhere it came from: you set…"env" | "generated" | "capability" | "provider" … (5)
labelA friendlier name, for entries that…string
statusWhether it exists and, for a…"missing" | "set" | "connected"
requiredByWhat is waiting on itobject[]
resourceIdWhich resourcestring
typeWhat kind of resource it isstring
storedAtWhere it actually lives, in wordsstring
revealableWhether its value can be shown…boolean
ciWhether a copy has been given…object
syncedWhether the pipeline has itboolean
pushedAtWhen it was last sent therestring
lastUseThe last time an agent actually…object
atWhen, in millisecondsnumber
laneHow it was used: a command,…"shell" | "code" | "browser" | "gateway" … (7)
detailWhere it went: the start of…string
approvedByWho released it for that use,…string
credentialHow the agent gets this connection's…object
deliveryHow the agent gets this connection's…"gateway" | "raw" | "direct" | "ssh-agent"
rulesWhat the credential may do through…object[]
methodsThe HTTP methods it covers (`DELETE`,…string[]
pathsThe paths it covers, below the…string[]
action`allow` forwards it, `ask` holds it…"allow" | "ask" | "deny"
whyOne line on what the rule…string
rulesFromWhose rules these are: the connector's…"connector" | "owner"
gateWho has to release this before…object
approversWho may release it, by emailstring[]
scopeHow far one release goes: `use`…"use" | "conversation"
hostsIts host guardobject
guardWhether a use off the list,…boolean
listThe hosts it goes to unasked…string[]
sourceWho set it: the owner, the…"owner" | "connector" | "keyring"
programsWhich programs on the owner's computers,…object
programsPrograms, by executable name or whole…string[]
packagesAndroid apps, by package name, it…string[]
anyFieldWhether it may go into a…boolean
sourceWho keeps the list: the owner,…"owner" | "keyring"
deviceWhere a secret held on one…object
machineWhich computer's keyring holds it, by…string
modeHow the keyring answers this sandbox:…"each-use" | "while-here" | "copy"
onlineWhether that computer answers nowboolean
lockedWhether the keyring there is locked,…boolean
sourceWhere the value itself is read…"keyring" | "bitwarden" | "1password" | "keepassxc"
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/inventory" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.inventory();
POST/secrets/revealShow one secret's value

The only call that hands a value back, and it is for the owner alone. Sent as a body rather than in the address, so the name never ends up in a log or a browser's history.

What you send

FieldTypeWhere
keyrequiredWhich secret, by namestringbody

What comes back

FieldType
valueThe value itselfstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/reveal" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"key":"OPENAI_API_KEY"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.reveal({
  "key": "OPENAI_API_KEY"
});
GET/secrets/gatesWhich credentials need somebody's approval

What is gated and who may release it. Names and addresses only, never values, and the agent may read it too: knowing a credential needs Bob is what stops it concluding the account is simply not connected.

What you send

Nothing. Call it as it is.

What comes back

FieldType
gatesEvery gate in forceobject[]
subjectWhat is gated: a secret's name,…string
kindWhether this gate covers one stored…"secret" | "capability"
approversExactly who may release it, by…string[]
scopeHow far one release goes: `use`…"use" | "conversation"
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/gates" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.gates();
PUT/secrets/gates/{subject}Put a credential behind named approvers

Names exactly who may release one secret or one connected account, and how far a single release goes. The owner's call alone. A signed-in browser or a mounted server cannot be released for one use, so those are always for the rest of the conversation.

What you send

FieldTypeWhere
subjectrequiredWhat is gated: a secret's name,…stringaddress
kindrequiredWhether this gate covers one stored…"secret" | "capability"body
approversrequiredExactly who may release it, by…string[]body
scoperequiredHow far one release goes: `use`…"use" | "conversation"body

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X PUT "$SANDBOX/secrets/gates/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"kind":"secret","approvers":["…","…"],"scope":"use"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.setGate({
  "subject": "Fix the flaky parser test",
  "kind": "secret",
  "approvers": [
    "…",
    "…"
  ],
  "scope": "use"
});
DELETE/secrets/gates/{subject}Stop requiring approval for a credential

Removes one gate, so the agent can use that credential the way it uses any other. The owner's call alone.

What you send

FieldTypeWhere
subjectrequiredWhich gate, by the secret name…stringaddress

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X DELETE "$SANDBOX/secrets/gates/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.removeGate({
  "subject": "Fix the flaky parser test"
});
GET/secrets/hostsWhich secrets are host-guarded, and where they may go

Every secret and connected account whose host guard is set, on or off, and its hosts. With the guard on, a use aimed off the list, or anywhere a command's text does not show, asks a person first, whatever the safety judge says. Names and hosts only, never values.

What you send

Nothing. Call it as it is.

What comes back

FieldType
guardsEvery secret whose host guard has…object[]
subjectWhich secret, by the name its…string
kindWhether this gate covers one stored…"secret" | "capability"
guardOn: a use off the list,…boolean
hostsWhere it goes without asking while…string[]
sourceWho set it: the owner, the…"owner" | "connector" | "keyring"
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/hosts" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.hosts();
PUT/secrets/hosts/{subject}Turn a secret's host guard on or off, and set its hosts

Replaces one secret's host guard. Anybody who may use secrets can turn it on or take hosts away; turning it off or adding a host is the owner's: from the agent it raises a card for the owner in the live conversation and waits for their answer.

What you send

FieldTypeWhere
subjectrequiredWhich secret, by name, or which…stringaddress
kindWhether the subject is a secret…"secret" | "capability"body
guardrequiredWhether a use off the list,…booleanbody
hostsrequiredThe whole new liststring[]body
conversationIdWhich conversation to ask the owner…stringbody

What comes back

FieldType
guardWhether the guard is on nowboolean
hostsWhere it goes without asking while…string[]
approvedByWho approved the change, when it…string
Try itanswered in this tab
curl
curl -X PUT "$SANDBOX/secrets/hosts/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"kind":"secret","guard":true,"hosts":["sandbox-a1b2c3d4e5f6.intentic.dev","sandbox-a1b2c3d4e5f6.intentic.dev"],"conversationId":"nightly-changelog"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.setHosts({
  "subject": "Fix the flaky parser test",
  "kind": "secret",
  "guard": true,
  "hosts": [
    "sandbox-a1b2c3d4e5f6.intentic.dev",
    "sandbox-a1b2c3d4e5f6.intentic.dev"
  ],
  "conversationId": "nightly-changelog"
});
GET/secrets/programsWhich programs each secret may be typed into

Every sandbox-held secret whose program list is set: the programs on the owner's computers and the phone apps it goes into unasked. A secret held in a computer's keyring carries its own list, shown on its inventory row. Names and programs only, never values.

What you send

Nothing. Call it as it is.

What comes back

FieldType
guardsEvery sandbox-held secret whose program list…object[]
programsPrograms, by executable name or whole…string[]
packagesAndroid apps, by package name, it…string[]
anyFieldWhether it may go into a…boolean
subjectWhich secret, by the name its…string
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/programs" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.programs();
PUT/secrets/programs/{subject}Set which programs a secret may be typed into

Replaces one sandbox-held secret's program list. Taking programs away, or turning `anyField` off, is open to anybody who may use secrets; adding one is the owner's: from the agent it raises a card for the owner in the live conversation and waits. Refused for a secret a computer's keyring holds, whose list is changed on that computer.

What you send

FieldTypeWhere
subjectrequiredWhich secret, by the name its…stringaddress
programsrequiredPrograms, by executable name or whole…string[]body
packagesrequiredAndroid apps, by package name, it…string[]body
anyFieldrequiredWhether it may go into a…booleanbody
conversationIdWhich conversation to ask the owner…stringbody

What comes back

FieldType
programsPrograms, by executable name or whole…string[]
packagesAndroid apps, by package name, it…string[]
anyFieldWhether it may go into a…boolean
approvedByWho approved the change, when it…string
Try itanswered in this tab
curl
curl -X PUT "$SANDBOX/secrets/programs/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"programs":["…","…"],"packages":["…","…"],"anyField":true,"conversationId":"nightly-changelog"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.setPrograms({
  "subject": "Fix the flaky parser test",
  "programs": [
    "…",
    "…"
  ],
  "packages": [
    "…",
    "…"
  ],
  "anyField": true,
  "conversationId": "nightly-changelog"
});
POST/secrets/type-intoType a secret into the focused window on one of your computers

After a short countdown, types one secret into whatever has focus on the computer named, through its keyring, which checks the window and still asks there when the entry's share says to. Answers what it went into, never the value.

What you send

FieldTypeWhere
keyrequiredWhich secret, by namestringbody
devicerequiredWhich computer, by its device card…stringbody
countdownSecondsHow long to wait before typing,…integerbody

What comes back

FieldType
programWhat it was typed intostring
fieldWhether the focused field was a…"password" | "text"
askedWhether the person at the computer…boolean
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/type-into" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"key":"OPENAI_API_KEY","device":"…","countdownSeconds":3}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.typeInto({
  "key": "OPENAI_API_KEY",
  "device": "…",
  "countdownSeconds": 3
});
GET/secrets/keyringsThe keyrings on your computers

Every connected computer with a keyring this sandbox can reach: whether it answers and is unlocked, how many of its entries are shared here, and whom it is paired with. Names and counts only, never values.

What you send

Nothing. Call it as it is.

What comes back

FieldType
keyringsobject[]
machineThe computer, by its device cardstring
onlineWhether it answers nowboolean
lockedWhether its keyring is locked, as…boolean
setUpWhether its keyring answers with a…boolean
versionThe keyring's release, as last heardstring
pendingInboxValues sent to be kept there…integer
sharedHow many of its entries are…integer
syncIts pairing with the owner's other…object
fingerprintIts sync key's fingerprint, to compare…string
peersThe computers it is paired with,…string[]
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/keyrings" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.keyrings();
POST/secrets/keyrings/pairPair the keyrings on two of your computers

Asks each computer's keyring to pair with the other: each shows a prompt with both fingerprints, and only a yes on both pairs them. After that each keeps the other's entries in step, sealed between them and carried by this sandbox, which cannot open what it carries.

What you send

FieldTypeWhere
arequiredOne computer, by its device cardstringbody
brequiredThe otherstringbody

What comes back

FieldType
fingerprintsEach keyring's sync-key fingerprint, as both…object
astring
bstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/keyrings/pair" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"a":"…","b":"…"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.keyringPair({
  "a": "…",
  "b": "…"
});
POST/secrets/wantAsk the owner's computers for a credential by where it is used

Asks each of the owner's computers with Passwords set up, most recently used first, for a credential that works at the place named (a site, a program, an ssh target, a git host). The person there is asked whether this sandbox may use it, and on what terms. Answers the name a reference uses once allowed, or that the answer is awaited in Passwords. Never a value.

What you send

FieldTypeWhere
originrequiredWhere it is to be used:…objectbody
when kind is "site"shapebody
hostrequiredThe page's host, `github.com`; never a…stringbody
when kind is "program"shapebody
programrequiredA program, by its executable's file…stringbody
labelThe program's own name for people,…stringbody
when kind is "package"shapebody
packagerequiredAn Android app, by its package…stringbody
labelstringbody
when kind is "ssh"shapebody
targetrequired`user@host`, as ssh's prompt names itstringbody
when kind is "ssh-key"shapebody
pathrequiredstringbody
when kind is "sudo"shapebody
userstringbody
when kind is "git"shapebody
urlrequired`https://host`, as git's credential helper or…stringbody
when kind is "prompt"shapebody
textrequiredThe prompt's own words, `Password for…stringbody
commandThe command that asked, `npm login`,…stringbody
sandboxThe sandbox whose terminal asked, for…stringbody
usernameThe account wanted, when the agent…stringbody
whyrequiredWhat it is for, in words…stringbody
conversationIdstringbody

What comes back

FieldType
when state is "allowed"shape
nameThe name a secret reference uses…string
machineThe computer whose keyring shares itstring
messagestring
when state is "pending"shape
idstring
machinestring
messageWhere the owner's answer is awaitedstring
when state is "denied"shape
messagestring
when state is "unknown"shape
messageNo keyring had it and nobody…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/want" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"origin":{"kind":"site","host":"sandbox-a1b2c3d4e5f6.intentic.dev"},"username":"…","why":"…","conversationId":"nightly-changelog"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.want({
  "origin": {
    "kind": "site",
    "host": "sandbox-a1b2c3d4e5f6.intentic.dev"
  },
  "username": "…",
  "why": "…",
  "conversationId": "nightly-changelog"
});
GET/secrets/passwordsThe passwords this sandbox may use

Every entry the keyrings on the owner's computers share with this sandbox, where each works and how this sandbox may use it, and each computer's Passwords state. Names and places only, never values.

What you send

Nothing. Call it as it is.

What comes back

FieldType
sandboxThis sandbox's own address, as the…string
itemsobject[]
namestring
titlestring
kind"password" | "text"
originsWhere it works, from the entry's…object[]
when kind is "site"shape
hostThe page's host, `github.com`; never a…string
when kind is "program"shape
programA program, by its executable's file…string
labelThe program's own name for people,…string
when kind is "package"shape
packageAn Android app, by its package…string
labelstring
when kind is "ssh"shape
target`user@host`, as ssh's prompt names itstring
when kind is "ssh-key"shape
pathstring
when kind is "sudo"shape
userstring
when kind is "git"shape
url`https://host`, as git's credential helper or…string
when kind is "prompt"shape
textThe prompt's own words, `Password for…string
commandThe command that asked, `npm login`,…string
sandboxThe sandbox whose terminal asked, for…string
anyFieldboolean
machineThe computer whose keyring keeps itstring
modeHow this sandbox may use it"each-use" | "while-here" | "copy"
onlineboolean
updatedAtnumber
lastUsedAtThis sandbox's last use of it,…number
keyringsobject[]
machinestring
onlineboolean
setUpAnswering, set up, and trusted by…boolean
lockedboolean
rememberobject
browserSign-ins in a browser with the…boolean
terminalssh, sudo and git prompts on…boolean
appsPassword fields in programs on this…boolean
phoneThe paired phone's autofillboolean
sandboxPrompts that hide what is typed,…boolean
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/passwords" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.passwords();
GET/secrets/passwords/needsCredentials this sandbox asked for that wait for an answer

The needs this sandbox raised (`secrets want`) that the owner has not answered yet, and on which computer each waits.

What you send

Nothing. Call it as it is.

What comes back

FieldType
needsobject[]
idstring
originobject
when kind is "site"shape
hostThe page's host, `github.com`; never a…string
when kind is "program"shape
programA program, by its executable's file…string
labelThe program's own name for people,…string
when kind is "package"shape
packageAn Android app, by its package…string
labelstring
when kind is "ssh"shape
target`user@host`, as ssh's prompt names itstring
when kind is "ssh-key"shape
pathstring
when kind is "sudo"shape
userstring
when kind is "git"shape
url`https://host`, as git's credential helper or…string
when kind is "prompt"shape
textThe prompt's own words, `Password for…string
commandThe command that asked, `npm login`,…string
sandboxThe sandbox whose terminal asked, for…string
usernamestring
detailstring
conversationstring
machineThe computer it was answered on,…string
state"pending" | "allowed" | "denied" | "unknown"
nameThe entry it was answered with,…string
atinteger
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/passwords/needs" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.passwordNeeds();
GET/secrets/passwords/activityThis sandbox's uses of the owner's passwords

Each time this sandbox used a password one of the owner's keyrings keeps, newest first, from its own use ledger. Never a value.

What you send

Nothing. Call it as it is.

What comes back

FieldType
linesobject[]
atnumber
namestring
lanestring
detailstring
approvedBystring
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/passwords/activity" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.passwordActivity();
GET/secrets/policy/{subject}How a connection's credential reaches the agent, and what it may do

Whether the credential gateway holds this connection's credential or the agent is handed it, and the method and path rules the gateway enforces on every request it attaches it to. Names and rules only, never values.

What you send

FieldTypeWhere
subjectrequiredWhich gate, by the secret name…stringaddress

What comes back

FieldType
subjectThe connection's idstring
deliveryHow the agent gets this connection's…"gateway" | "raw" | "direct" | "ssh-agent"
rulesWhat the credential may do through…object[]
methodsThe HTTP methods it covers (`DELETE`,…string[]
pathsThe paths it covers, below the…string[]
action`allow` forwards it, `ask` holds it…"allow" | "ask" | "deny"
whyOne line on what the rule…string
rulesFromWhose rules these are: the connector's…"connector" | "owner"
Try itanswered in this tab
curl
curl "$SANDBOX/secrets/policy/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.policy({
  "subject": "Fix the flaky parser test"
});
PUT/secrets/policy/{subject}Set how a connection's credential reaches the agent, and its rules

The owner's alone, and never the agent's: handing the agent the credential itself, or replacing what the gateway lets it do, is a decision about the credential, not a use of it.

What you send

FieldTypeWhere
subjectrequiredThe connection's idstringaddress
deliveryHand the agent the credential itself…"gateway" | "raw"body
rulesThe owner's own rules, replacing the…object[] | nullbody
methodsThe HTTP methods it covers (`DELETE`,…string[]body
pathsThe paths it covers, below the…string[]body
actionrequired`allow` forwards it, `ask` holds it…"allow" | "ask" | "deny"body
whyOne line on what the rule…stringbody

What comes back

FieldType
subjectThe connection's idstring
deliveryHow the agent gets this connection's…"gateway" | "raw" | "direct" | "ssh-agent"
rulesWhat the credential may do through…object[]
methodsThe HTTP methods it covers (`DELETE`,…string[]
pathsThe paths it covers, below the…string[]
action`allow` forwards it, `ask` holds it…"allow" | "ask" | "deny"
whyOne line on what the rule…string
rulesFromWhose rules these are: the connector's…"connector" | "owner"
Try itanswered in this tab
curl
curl -X PUT "$SANDBOX/secrets/policy/Fix%20the%20flaky%20parser%20test" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"delivery":"gateway","rules":[{"methods":["…","…"],"paths":["src/app.ts","README.md"],"action":"allow","why":"…"},{"methods":["…","…"],"paths":["src/app.ts","README.md"],"action":"ask","why":"…"}]}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.setPolicy({
  "subject": "Fix the flaky parser test",
  "delivery": "gateway",
  "rules": [
    {
      "methods": [
        "…",
        "…"
      ],
      "paths": [
        "src/app.ts",
        "README.md"
      ],
      "action": "allow",
      "why": "…"
    },
    {
      "methods": [
        "…",
        "…"
      ],
      "paths": [
        "src/app.ts",
        "README.md"
      ],
      "action": "ask",
      "why": "…"
    }
  ]
});
POST/secrets/requestAsk a named person to release a credential

Raises the release card in the live conversation and waits for one of the people named on it. Refused, rather than held, when there is nobody to ask: an unattended turn, no live conversation, or a click with no verified identity behind it.

What you send

FieldTypeWhere
subjectrequiredWhat to ask for: the secret's…stringbody
whyOne line on what it is…stringbody
conversationIdWhich conversation to raise the card…stringbody

What comes back

FieldType
grantedAlways true: a refusal is an…true
approvedByWho released itstring
messageWhat the grant means in practice,…string
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/secrets/request" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"subject":"Fix the flaky parser test","why":"…","conversationId":"nightly-changelog"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.secrets.request({
  "subject": "Fix the flaky parser test",
  "why": "…",
  "conversationId": "nightly-changelog"
});
More in Connected systems

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