API reference
Blinds
Credential custody, consent and delegation: hold secrets for agents and grant them narrowly, with an owner in the loop.
- Operations
- 17
- Base path
https://os.one.ml/api/v1/blinds- Scopes
blinds:readblinds:write- API keys
- 6 need a signed-in session · 11 not yet tested
- SDK
genesis.call('blinds_listActivity', …)· helpers undergenesis.blinds- MCP
- 17 tools
Operations
| Operation | Endpoint | API key |
|---|---|---|
| Latest Blinds audit events | GET/activity | — |
| List consent decisions | GET/consent | — |
| Revoke a consent decision | DELETE/consent/{consent_id} | — |
| Approve a consent request | POST/consent/{consent_id}/approve | Signed-in session |
| Deny a consent request | POST/consent/{consent_id}/deny | Signed-in session |
| List pending consent requests | GET/consent/pending | — |
| List credential variable names | GET/credentials | — |
| Store a credential (connect a static key) | POST/credentials | — |
| Revoke one credential | DELETE/credentials/{variable} | — |
| List current delegations | GET/delegates | — |
| Delegate variables to an agent | POST/delegates | — |
| Revoke a delegation | DELETE/delegates/{delegate_id} | — |
| List active OAuth connections | GET/oauth/connections | — |
| Original human owner enrollment: attach | POST/owner-enrollment/attach | Signed-in session |
| Original human owner enrollment: p256-ensure | POST/owner-enrollment/p256-ensure | Signed-in session |
| Original human owner enrollment: reserve | POST/owner-enrollment/reserve | Signed-in session |
| Original human owner enrollment: sign | POST/owner-enrollment/sign | Signed-in session |
Activity
Latest Blinds audit events
GET/v1/blinds/activity
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection. The latest 200 events for the organization.
Responses
- 200Events
Response fields
eventsobject[]requiredevents[].[].event_idstring (uuid)requiredevents[].[].occurred_atstring (date-time)requiredevents[].[].kindstringrequiredevents[].[].actionstringrequiredevents[].[].resourcestring | nullevents[].[].outcomestring | nullevents[].[].subject_didstring | null
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/activity" \
-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('blinds_listActivity'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listActivity",
"arguments": {}
}
}Consent
List consent decisions
GET/v1/blinds/consent
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection.
Responses
- 200Decisions
Response fields
recordsobject[]requiredrecords[].[].consent_idstring (uuid)requiredrecords[].[].agent_didstringrequiredrecords[].[].variablesstring[]requiredrecords[].[].destination_domainsstring[]records[].[].scopesstring[]records[].[].granted_bystringrecords[].[].status"approved" | "denied" | "revoked" | "expired"requiredrecords[].[].decided_atstring (date-time)requiredrecords[].[].expires_atstring | null (date-time)records[].[].revocableboolean
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/consent" \
-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('blinds_listConsentRecords'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listConsentRecords",
"arguments": {}
}
}Revoke a consent decision
DELETE/v1/blinds/consent/{consent_id}
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection.
Parameters
consent_idpath · string (uuid)requiredIdempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Responses
- 200Revoked
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 404Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X DELETE "https://os.one.ml/api/v1/blinds/consent/$CONSENT_ID" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_revokeConsent', {
consent_id: '<consent_id>',
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_revokeConsent",
"arguments": {
"consent_id": "<consent_id>",
"idempotency_key": "<a stable key per change>"
}
}
}List pending consent requests
GET/v1/blinds/consent/pending
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection.
Responses
- 200Pending requests
Response fields
requestsobject[]requiredrequests[].[].consent_idstring (uuid)requiredrequests[].[].agent_didstringrequiredrequests[].[].variablesstring[]requiredrequests[].[].destination_domainsstring[]requests[].[].providersstring[]requests[].[].status"pending"requiredrequests[].[].created_atstring (date-time)required
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/consent/pending" \
-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('blinds_listPendingConsent'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listPendingConsent",
"arguments": {}
}
}Approve
Approve a consent request
POST/v1/blinds/consent/{consent_id}/approve
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection. Approval needs a verifiable One account signature; Blinds answers 403 until a cryptographic verifier is configured and never stores unverifiable evidence.
Parameters
consent_idpath · string (uuid)requiredIdempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Request body application/json
signaturestringrequiredexpires_in_secondsinteger
Responses
- 200Approved
- 400Refusal; error.code and x-request-id identify it
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 404Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/consent/$CONSENT_ID/approve" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"signature": "string"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_approveConsent', {
consent_id: '<consent_id>',
body: {
signature: 'string',
},
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_approveConsent",
"arguments": {
"consent_id": "<consent_id>",
"body": {
"signature": "string"
},
"idempotency_key": "<a stable key per change>"
}
}
}Deny
Deny a consent request
POST/v1/blinds/consent/{consent_id}/deny
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection.
Parameters
consent_idpath · string (uuid)requiredIdempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Responses
- 200Denied
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 404Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/consent/$CONSENT_ID/deny" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_denyConsent', {
consent_id: '<consent_id>',
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_denyConsent",
"arguments": {
"consent_id": "<consent_id>",
"idempotency_key": "<a stable key per change>"
}
}
}Credentials
List credential variable names
GET/v1/blinds/credentials
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection. Names only; values are never returned.
Responses
- 200Variable names
Response fields
credentialsstring[]requiredVariable names only. Values never leave Blinds.
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/credentials" \
-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('blinds_listCredentials'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listCredentials",
"arguments": {}
}
}Store a credential (connect a static key)
POST/v1/blinds/credentials
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection. The value is KMS-encrypted and is never returned.
Parameters
Idempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Request body application/json
variable_namestringrequiredvaluestringrequiredEncrypted with KMS on arrival; never returned or logged.
credential_typestringrequireddestination_domainsstring[]providerstringdescriptionstring
Responses
- 201Stored
Response fields
variable_namestringrequired
- 400Refusal; error.code and x-request-id identify it
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/credentials" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"variable_name": "string",
"value": "string",
"credential_type": "string"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_storeCredential', {
body: {
variable_name: 'string',
value: 'string',
credential_type: 'string',
},
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_storeCredential",
"arguments": {
"body": {
"variable_name": "string",
"value": "string",
"credential_type": "string"
},
"idempotency_key": "<a stable key per change>"
}
}
}Revoke one credential
DELETE/v1/blinds/credentials/{variable}
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection.
Parameters
variablepath · stringrequiredIdempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Responses
- 200Revoked
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 404Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X DELETE "https://os.one.ml/api/v1/blinds/credentials/$VARIABLE" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_deleteCredential', {
variable: '<variable>',
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_deleteCredential",
"arguments": {
"variable": "<variable>",
"idempotency_key": "<a stable key per change>"
}
}
}Delegates
List current delegations
GET/v1/blinds/delegates
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection. Non-revoked, unexpired grants: which agents hold which variables.
Responses
- 200Delegations
Response fields
delegatesobject[]requireddelegates[].[].delegate_idstring (uuid)requireddelegates[].[].parent_idstring | null (uuid)delegates[].[].namestringrequireddelegates[].[].issuer_didstringrequireddelegates[].[].delegated_variablesstring[]requireddelegates[].[].max_depthintegerdelegates[].[].current_depthintegerdelegates[].[].ttl_secondsintegerdelegates[].[].created_atstring (date-time)delegates[].[].expires_atstring (date-time)required
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/delegates" \
-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('blinds_listDelegates'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listDelegates",
"arguments": {}
}
}Delegate variables to an agent
POST/v1/blinds/delegates
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection.
Parameters
Idempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Request body application/json
namestringrequireddelegated_variablesstring[]requiredmax_depthintegerdefault 1
ttl_secondsintegerrequired
Responses
- 201Delegation
Response fields
delegate_idstring (uuid)requiredparent_idstring | null (uuid)namestringrequiredissuer_didstringrequireddelegated_variablesstring[]requiredmax_depthintegercurrent_depthintegerttl_secondsintegercreated_atstring (date-time)expires_atstring (date-time)required
- 400Refusal; error.code and x-request-id identify it
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/delegates" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"delegated_variables": [],
"ttl_seconds": 1
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_createDelegate', {
body: {
name: 'string',
delegated_variables: [],
ttl_seconds: 1,
},
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_createDelegate",
"arguments": {
"body": {
"name": "string",
"delegated_variables": [],
"ttl_seconds": 1
},
"idempotency_key": "<a stable key per change>"
}
}
}Revoke a delegation
DELETE/v1/blinds/delegates/{delegate_id}
Requires blinds:write and a UUID Idempotency-Key. Tenant comes only from the verified Genesis selection.
Parameters
delegate_idpath · string (uuid)requiredIdempotency-Keyheader · string (uuid)requiredClient UUID for this logical mutation. Reuse it after an uncertain outcome; the gateway never substitutes one.
Responses
- 200Revoked
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 404Refusal; error.code and x-request-id identify it
- 409Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl -X DELETE "https://os.one.ml/api/v1/blinds/delegates/$DELEGATE_ID" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY"import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const idempotencyKey = '<a stable key per change>'
const result = await genesis.call('blinds_revokeDelegate', {
delegate_id: '<delegate_id>',
}, {
headers: { 'Idempotency-Key': idempotencyKey }, // one key per change, reused on every retry
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_revokeDelegate",
"arguments": {
"delegate_id": "<delegate_id>",
"idempotency_key": "<a stable key per change>"
}
}
}Oauth
List active OAuth connections
GET/v1/blinds/oauth/connections
Requires blinds:read (or blinds:write). Tenant comes only from the verified Genesis selection. Metadata only (provider, scopes, variable, created, active); tokens never leave Blinds. Connecting a provider is not admitted on Genesis.
Responses
- 200Active connections
Response fields
connectionsobject[]requiredconnections[].[].connection_idstring (uuid)requiredconnections[].[].providerstringrequiredconnections[].[].variable_namestringrequiredconnections[].[].scopesstring[]requiredconnections[].[].activebooleanrequiredconnections[].[].created_atstring (date-time)requiredtotalintegerrequired
- 401Refusal; error.code and x-request-id identify it
- 403Refusal; error.code and x-request-id identify it
- 503Refusal; error.code and x-request-id identify it
- 504Refusal; error.code and x-request-id identify it
- 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/blinds/oauth/connections" \
-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('blinds_listOAuthConnections'){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_listOAuthConnections",
"arguments": {}
}
}Owner enrollment
Original human owner enrollment: attach
POST/v1/blinds/owner-enrollment/attach
A person's own signed-in One account session only. Gateway authenticates with Auth session; Blinds freshly authorizes IAM owner and generation. No agent, M2M, OBO, scope conversion, automatic retry, or arbitrary signing payload. Preserve the original operation and locators on explicit recovery.
Request body application/json
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Responses
- 200Confirmed public metadata only
Response fields
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
state"attached"requiredcreationobjectrequiredcreation.intent_idstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
creation.operation_idstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
creation.creation_receipt_idstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
creation.agent_idstringrequiredmin length 1 · max length 128
creation.canonical_didstringrequiredmin length 1 · max length 256
creation.registered_public_keystringrequiredmin length 1 · max length 128
creation.ownerobjectrequiredcreation.owner.issuer"https://auth.life.one"requiredcreation.owner.original_ownerstringrequiredmin length 1 · max length 36
creation.owner.organization_generationintegerrequiredmin 1
creation.owner.scopeobjectrequiredcreation.owner.scope.platform_id"blinds"requiredcreation.owner.scope.organization_idstringrequiredmin length 1 · max length 34
creation.owner.scope.workspace_idstring | nullrequiredcreation.owner.scope.project_idstring | nullrequiredcreation.owner.scope.environment_id"sandbox" | "live"required
- 400Sanitized refusal or unconfirmed outcome; no automatic replay
- 401Sanitized refusal or unconfirmed outcome; no automatic replay
- 409Sanitized refusal or unconfirmed outcome; no automatic replay
- 503Sanitized refusal or unconfirmed outcome; no automatic replay
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/owner-enrollment/attach" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('blinds_ownerAttach', {
body: {
schemaVersion: 1,
requestId: '00000000-0000-4000-8000-000000000000',
edReservationId: '00000000-0000-4000-8000-000000000000',
enrollmentIntentId: '00000000-0000-4000-8000-000000000000',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_ownerAttach",
"arguments": {
"body": {
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}
}
}
}Original human owner enrollment: p256-ensure
POST/v1/blinds/owner-enrollment/p256-ensure
A person's own signed-in One account session only. Gateway authenticates with Auth session; Blinds freshly authorizes IAM owner and generation. No agent, M2M, OBO, scope conversion, automatic retry, or arbitrary signing payload. Preserve the original operation and locators on explicit recovery.
Request body application/json
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Responses
- 200Confirmed public metadata only
Response fields
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
state"ready"requireddpopPublicJwkobjectrequireddpopPublicJwk.kty"EC"requireddpopPublicJwk.crv"P-256"requireddpopPublicJwk.xstringrequiredmin length 1 · max length 43
dpopPublicJwk.ystringrequiredmin length 1 · max length 43
senderJktstringrequiredmin length 1 · max length 43
- 400Sanitized refusal or unconfirmed outcome; no automatic replay
- 401Sanitized refusal or unconfirmed outcome; no automatic replay
- 409Sanitized refusal or unconfirmed outcome; no automatic replay
- 503Sanitized refusal or unconfirmed outcome; no automatic replay
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/owner-enrollment/p256-ensure" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('blinds_ownerP256Ensure', {
body: {
schemaVersion: 1,
requestId: '00000000-0000-4000-8000-000000000000',
edReservationId: '00000000-0000-4000-8000-000000000000',
enrollmentIntentId: '00000000-0000-4000-8000-000000000000',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_ownerP256Ensure",
"arguments": {
"body": {
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}
}
}
}Original human owner enrollment: reserve
POST/v1/blinds/owner-enrollment/reserve
A person's own signed-in One account session only. Gateway authenticates with Auth session; Blinds freshly authorizes IAM owner and generation. No agent, M2M, OBO, scope conversion, automatic retry, or arbitrary signing payload. Preserve the original operation and locators on explicit recovery.
Request body application/json
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
operationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
organizationIdstringrequiredpattern ^o_[A-Za-z0-9_]{1,32}$
scopeobjectrequiredscope.scopeKind"organization" | "hierarchy"requiredscope.projectIdstring | nullrequiredpattern ^pr_[A-Za-z0-9_]{1,32}$
scope.workspaceIdstring | nullrequiredpattern ^w_[A-Za-z0-9_]{1,32}$
scope.environment"sandbox" | "live"requireddisplayNamestringrequiredTrimmed label; maximum 64 UTF-8 bytes. min length 1 · max length 64
kind"agent:instance"required
Responses
- 200Confirmed public metadata only
Response fields
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
operationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
publicKeystringrequiredmin length 1 · max length 128
state"key_ready" | "attached"requiredexpiresAtMsintegerrequiredoriginalOrganizationGenerationintegerrequiredmin 1
- 400Sanitized refusal or unconfirmed outcome; no automatic replay
- 401Sanitized refusal or unconfirmed outcome; no automatic replay
- 409Sanitized refusal or unconfirmed outcome; no automatic replay
- 503Sanitized refusal or unconfirmed outcome; no automatic replay
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/owner-enrollment/reserve" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"operationId": "00000000-0000-4000-8000-000000000000",
"organizationId": "string",
"scope": {
"scopeKind": "organization",
"projectId": "string",
"workspaceId": "string",
"environment": "sandbox"
},
"displayName": "string",
"kind": "agent:instance"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('blinds_ownerReserve', {
body: {
schemaVersion: 1,
requestId: '00000000-0000-4000-8000-000000000000',
operationId: '00000000-0000-4000-8000-000000000000',
organizationId: 'string',
scope: {
scopeKind: 'organization',
projectId: 'string',
workspaceId: 'string',
environment: 'sandbox',
},
displayName: 'string',
kind: 'agent:instance',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_ownerReserve",
"arguments": {
"body": {
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"operationId": "00000000-0000-4000-8000-000000000000",
"organizationId": "string",
"scope": {
"scopeKind": "organization",
"projectId": "string",
"workspaceId": "string",
"environment": "sandbox"
},
"displayName": "string",
"kind": "agent:instance"
}
}
}
}Original human owner enrollment: sign
POST/v1/blinds/owner-enrollment/sign
A person's own signed-in One account session only. Gateway authenticates with Auth session; Blinds freshly authorizes IAM owner and generation. No agent, M2M, OBO, scope conversion, automatic retry, or arbitrary signing payload. Preserve the original operation and locators on explicit recovery.
Request body application/json
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Responses
- 200Confirmed public metadata only
Response fields
schemaVersion1requiredrequestIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
edReservationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
enrollmentIntentIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
operationIdstring (uuid)requiredpattern ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
signingPayloadSha256stringrequiredpattern ^[0-9a-f]{64}$
signatureMultibasestringrequiredmin length 1 · max length 256
- 400Sanitized refusal or unconfirmed outcome; no automatic replay
- 401Sanitized refusal or unconfirmed outcome; no automatic replay
- 409Sanitized refusal or unconfirmed outcome; no automatic replay
- 503Sanitized refusal or unconfirmed outcome; no automatic replay
- 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/blinds/owner-enrollment/sign" \
-H "Authorization: Bearer $GENESIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}'import { Genesis } from '@lifesi/genesis'
const genesis = new Genesis({ apiKey: process.env.GENESIS_API_KEY })
const result = await genesis.call('blinds_ownerSign', {
body: {
schemaVersion: 1,
requestId: '00000000-0000-4000-8000-000000000000',
edReservationId: '00000000-0000-4000-8000-000000000000',
enrollmentIntentId: '00000000-0000-4000-8000-000000000000',
},
}){
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "blinds_ownerSign",
"arguments": {
"body": {
"schemaVersion": 1,
"requestId": "00000000-0000-4000-8000-000000000000",
"edReservationId": "00000000-0000-4000-8000-000000000000",
"enrollmentIntentId": "00000000-0000-4000-8000-000000000000"
}
}
}
}One Superintelligence, Inc. · Built from Genesis 0.1.12 and the live gateway on 2026-10-20. Support