API reference
Henry
The agent runtime: run tasks through Foundry with live activity, approvals, follow-up commands and signed receipts.
- Operations
- 8
- Base path
https://os.one.ml/api/v1/henry- Scopes
henry:readhenry:write- API keys
- 1 need a signed-in session · 7 not yet tested
- SDK
genesis.call('henry_getConfig', …)· helpers undergenesis.henry- MCP
- 7 tools; the other 1 through
genesis_call
Operations
| Operation | Endpoint | API key |
|---|---|---|
| Read credential status and the real Foundry model catalog | GET/config | — |
| Validate and encrypt an organization Foundry key in Genesis KMS | PUT/credential | Signed-in session |
| Read the current standalone Henry public receipt verification key | GET/receipts/verification-keys/current | — |
| List runs belonging to the signed organization | GET/runs | — |
| Execute a Henry task through Foundry | POST/runs | — |
| Read live activity, approvals, messages and signed receipts | GET/runs/{run_id} | — |
| Approve or reject a specific public HTTPS read | POST/runs/{run_id}/approvals/{approval_id} | — |
| Pause, resume, cancel or send follow-up input | POST/runs/{run_id}/command | — |
Config
Read credential status and the real Foundry model catalog
GET/v1/henry/config
Responses
- 200Actual Henry result
Response fields
credential_configuredbooleanrequiredmodelsobject[]requiredmodels[].[].idstringrequired
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/henry/config" \
-H "Authorization: Bearer $GENESIS_API_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_getConfig'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_getConfig",
"arguments": {}
}
}Credential
Validate and encrypt an organization Foundry key in Genesis KMS
PUT/v1/henry/credential
Request body application/json
api_keystringrequiredmax length 4096
Responses
- 200Actual Henry result
Response fields
credential_configuredbooleanrequiredmodelsobject[]requiredmodels[].[].idstringrequired
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl -X PUT "https://os.one.ml/api/v1/henry/credential" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"api_key": "string"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_putCredential', {
body: {
api_key: 'string',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_putCredential",
"arguments": {
"body": {
"api_key": "string"
}
}
}
}Receipts
Read the current standalone Henry public receipt verification key
GET/v1/henry/receipts/verification-keys/current
Requires the existing verified gateway identity and henry:read or henry:write scope. Returns only the current standalone Henry public signer, with no execution, credential, grant or funding mutation. Obtain through the trusted configured gateway and pin with independent deployment/signer provenance; never replace a trusted anchor from receipt content. Does not identify a separate Fleets signer or establish funding settlement.
Responses
- 200Current standalone Henry public receipt verification key
Response fields
keyIdstringrequiredCurrent standalone Henry signer identifier. min length 1 · max length 256 · pattern ^[^\u0000-\u001f\u007f]+$
publicKeyBase64stringrequiredCanonical standard base64 encoding of the raw 32-byte Ed25519 public key; never a private key or seed. min length 44 · max length 44 · pattern ^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$
- 401Verified gateway identity required
- 403Henry read or write scope required
- 503Worker verification key unavailable; fixed error without private material
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/henry/receipts/verification-keys/current" \
-H "Authorization: Bearer $GENESIS_API_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_getReceiptVerificationKey'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "genesis_call",
"arguments": {
"operation": "henry_getReceiptVerificationKey",
"arguments": {}
}
}
}Runs
List runs belonging to the signed organization
GET/v1/henry/runs
Parameters
page_tokenquery · string
Responses
- 200Actual Henry result
Response fields
runsobject[]requiredruns[].[].idstringrequiredruns[].[].taskstringrequiredruns[].[].modelstringrequiredruns[].[].status"ready" | "running" | "acting" | "paused" | "awaiting_approval" | "completed" | "cancelled" | "failed" | "waiting_input"requiredruns[].[].created_atstringrequiredruns[].[].updated_atstringrequiredruns[].[].activityobject[]requiredruns[].[].activity[].[].idstringrequiredruns[].[].activity[].[].atstringrequiredruns[].[].activity[].[].typestringrequiredruns[].[].activity[].[].detailstringrequiredruns[].[].approvalsobject[]requiredruns[].[].approvals[].[].idstringrequiredruns[].[].approvals[].[].actionstringrequiredruns[].[].approvals[].[].urlstringrequiredruns[].[].approvals[].[].statusstringrequiredruns[].[].approvals[].[].requested_atstringrequiredruns[].[].phasesobject[]requiredruns[].[].phases[].[].idstringruns[].[].phases[].[].codeintegerruns[].[].phases[].[].receiptobjectruns[].[].phases[].[].usageobject | nullruns[].[].messagesobject[]requiredruns[].[].messages[].[].rolestringrequiredruns[].[].messages[].[].contentstring | nullnext_page_tokenstring | null
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/henry/runs" \
-H "Authorization: Bearer $GENESIS_API_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_listRuns'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_listRuns",
"arguments": {}
}
}Execute a Henry task through Foundry
POST/v1/henry/runs
The HTTP request stays active while the real worker executes. Poll the run_id or list runs concurrently for activity. At most six model phases per run. No background execution depends on Cloud Run idle CPU.
Request body application/json
taskstringrequiredmax length 16000
modelstringrequiredmax length 200
run_idstring (uuid)Optional caller-generated UUIDv4 for polling while this request executes.
Responses
- 200Actual Henry result
Response fields
idstringrequiredtaskstringrequiredmodelstringrequiredstatus"ready" | "running" | "acting" | "paused" | "awaiting_approval" | "completed" | "cancelled" | "failed" | "waiting_input"requiredcreated_atstringrequiredupdated_atstringrequiredactivityobject[]requiredactivity[].[].idstringrequiredactivity[].[].atstringrequiredactivity[].[].typestringrequiredactivity[].[].detailstringrequiredapprovalsobject[]requiredapprovals[].[].idstringrequiredapprovals[].[].actionstringrequiredapprovals[].[].urlstringrequiredapprovals[].[].statusstringrequiredapprovals[].[].requested_atstringrequiredphasesobject[]requiredphases[].[].idstringphases[].[].codeintegerphases[].[].receiptobjectphases[].[].usageobject | nullmessagesobject[]requiredmessages[].[].rolestringrequiredmessages[].[].contentstring | null
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/henry/runs" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"task": "string",
"model": "string"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_createRun', {
body: {
task: 'string',
model: 'string',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_createRun",
"arguments": {
"body": {
"task": "string",
"model": "string"
}
}
}
}Read live activity, approvals, messages and signed receipts
GET/v1/henry/runs/{run_id}
Parameters
run_idpath · stringrequired
Responses
- 200Actual Henry result
Response fields
idstringrequiredtaskstringrequiredmodelstringrequiredstatus"ready" | "running" | "acting" | "paused" | "awaiting_approval" | "completed" | "cancelled" | "failed" | "waiting_input"requiredcreated_atstringrequiredupdated_atstringrequiredactivityobject[]requiredactivity[].[].idstringrequiredactivity[].[].atstringrequiredactivity[].[].typestringrequiredactivity[].[].detailstringrequiredapprovalsobject[]requiredapprovals[].[].idstringrequiredapprovals[].[].actionstringrequiredapprovals[].[].urlstringrequiredapprovals[].[].statusstringrequiredapprovals[].[].requested_atstringrequiredphasesobject[]requiredphases[].[].idstringphases[].[].codeintegerphases[].[].receiptobjectphases[].[].usageobject | nullmessagesobject[]requiredmessages[].[].rolestringrequiredmessages[].[].contentstring | null
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/henry/runs/$RUN_ID" \
-H "Authorization: Bearer $GENESIS_API_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_getRun', {
run_id: '<run_id>',
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_getRun",
"arguments": {
"run_id": "<run_id>"
}
}
}Approvals
Approve or reject a specific public HTTPS read
POST/v1/henry/runs/{run_id}/approvals/{approval_id}
Parameters
run_idpath · stringrequiredapproval_idpath · stringrequired
Request body application/json
decision"approve" | "reject"required
Responses
- 200Actual Henry result
Response fields
idstringrequiredtaskstringrequiredmodelstringrequiredstatus"ready" | "running" | "acting" | "paused" | "awaiting_approval" | "completed" | "cancelled" | "failed" | "waiting_input"requiredcreated_atstringrequiredupdated_atstringrequiredactivityobject[]requiredactivity[].[].idstringrequiredactivity[].[].atstringrequiredactivity[].[].typestringrequiredactivity[].[].detailstringrequiredapprovalsobject[]requiredapprovals[].[].idstringrequiredapprovals[].[].actionstringrequiredapprovals[].[].urlstringrequiredapprovals[].[].statusstringrequiredapprovals[].[].requested_atstringrequiredphasesobject[]requiredphases[].[].idstringphases[].[].codeintegerphases[].[].receiptobjectphases[].[].usageobject | nullmessagesobject[]requiredmessages[].[].rolestringrequiredmessages[].[].contentstring | null
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/henry/runs/$RUN_ID/approvals/$APPROVAL_ID" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"decision": "approve"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_decideApproval', {
run_id: '<run_id>',
approval_id: '<approval_id>',
body: {
decision: 'approve',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_decideApproval",
"arguments": {
"run_id": "<run_id>",
"approval_id": "<approval_id>",
"body": {
"decision": "approve"
}
}
}
}Command
Pause, resume, cancel or send follow-up input
POST/v1/henry/runs/{run_id}/command
Parameters
run_idpath · stringrequired
Request body application/json
action"pause" | "resume" | "cancel" | "input"requiredtextstringmax length 16000
Responses
- 200Actual Henry result
Response fields
idstringrequiredtaskstringrequiredmodelstringrequiredstatus"ready" | "running" | "acting" | "paused" | "awaiting_approval" | "completed" | "cancelled" | "failed" | "waiting_input"requiredcreated_atstringrequiredupdated_atstringrequiredactivityobject[]requiredactivity[].[].idstringrequiredactivity[].[].atstringrequiredactivity[].[].typestringrequiredactivity[].[].detailstringrequiredapprovalsobject[]requiredapprovals[].[].idstringrequiredapprovals[].[].actionstringrequiredapprovals[].[].urlstringrequiredapprovals[].[].statusstringrequiredapprovals[].[].requested_atstringrequiredphasesobject[]requiredphases[].[].idstringphases[].[].codeintegerphases[].[].receiptobjectphases[].[].usageobject | nullmessagesobject[]requiredmessages[].[].rolestringrequiredmessages[].[].contentstring | null
- 400Invalid request
- 401Verified gateway identity required
- 403Henry scope required
- 404Resource does not belong to the signed organization
- 409State changed, action attempted or proof already bound
- 502Runtime unavailable
- 503Storage or custody unavailable
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/henry/runs/$RUN_ID/command" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "pause"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('henry_commandRun', {
run_id: '<run_id>',
body: {
action: 'pause',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "henry_commandRun",
"arguments": {
"run_id": "<run_id>",
"body": {
"action": "pause"
}
}
}
}One Superintelligence, Inc. · Built from Genesis 0.1.12 and the live gateway on 2026-10-20. Support